导入我自己的模块时出现Python路径问题。最好的办法是什么?

2024-04-27 04:24:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经创建了python模块,但它们位于不同的目录中。在

/xml/xmlcreator.py
/tasklist/tasks.py

在这里,任务.py正在尝试导入xmlcreator,但两者的路径不同。一种方法是包括xmlcreator.py在Python道上。但是,考虑到我将要发布代码,这似乎不是建议的正确方法here。我应该如何在任何子目录中写入xml,或者应该包含在哪个子目录中?在


Tags: 模块方法代码py路径目录herexml
3条回答

最好的方法是在您定义的单个顶级包中创建子包。然后你把这些放在一个包裹里一起装运。如果您使用的是setuptools/Distribute,并且希望单独分发它们,那么您还可以定义一个“namspace包”,该包将安装在其中。你不需要用任何难看的东西系统路径黑客。在

创建如下目录树:

mypackage/__init__.py
mypackage/xml/__init__.py
mypackage/xml/xmlcreator.py
mypackage/tasklist/__init__.py
mypackage/tasklist/tasks.py

__init__.py文件可能为空。它们将目录定义为Python将在其中搜索的包。在

除非要使用命名空间包,mypackage/__init__.py应该包含:

^{pr2}$

您的setup.py文件包含:

...
namespace_packages=["mypackage"],
...

那么在你的代码中:

from mypackage.xml import xmlcreator
from mypackage.tasklist import tasks

在你需要的地方都可以买到。在本例中,您只需要使一个名称全局唯一,即mypackage名称。在

为了开发代码,您可以通过

python setup.py develop  user

这将设置本地python环境,以便在工作区中查找包。在

当我启动一个新的Python项目时,我立即编写它的setup.py和{a1},这样我就可以:

python setup.py develop

所有的东西都神奇地加入到我的Python身上。如果您从virtualenv中执行它,它会更好,因为您不需要在整个系统范围内安装它。在

以下是更多信息:

http://packages.python.org/distribute/setuptools.html#development-mode

你是将两个模块单独打包发布呢?在

如果是前者,那么您可能希望让您的用户安装xml模块(我称之为其他名称:)以便在默认情况下,它已经在Python的路径上,并将其声明为tasklist模块的依赖项。在

如果两者都是作为一个bundle分布的,那么relative imports似乎是最好的选择,因为您可以控制路径之间的相对位置。在

相关问题 更多 >