我在python中创建了一个项目,我很好奇如何在python中使用包.
这是我的目录布局:
top-level dir
\ tests
__init__.py
\ examples
__init__.py
example.py
module.py
Run Code Online (Sandbox Code Playgroud)
我将如何在我的example.py模块中包含module.py.我知道我可以将PYTHONPATH设置为顶级目录,但这似乎不是一个好的解决方案.这就是pydev如何解决这个问题,但我想要一个不需要更新环境变量的解决方案.
我可以在example.py的顶部放置一些东西来更新sys.path,如下所示:
from os import path
import sys
sys.path.append( path.dirname(path.abspath(path.dirname(__file__))) )
Run Code Online (Sandbox Code Playgroud)
我认为这也不是一个合适的解决方案.
我觉得我错过了python包的一些基本部分.我在python 2.6上测试它.如果需要进一步说明,请告诉我.
Python包非常简单:包是sys.path中具有__init__.py文件的任何条目下的任何目录.但是,如果通过相对导入(例如import package.moduleor)导入模块,则该模块仅被视为包from package import module.请注意,这意味着通常,某人必须设置sys.path以包含您要导入的任何包上面的目录,无论是通过PYTHONPATH还是其他方式.
主要的问题是主要模块(直接从命令行运行的模块)始终__main__无论它们的位置如何.因此,他们必须进行绝对导入,要么依赖于PYTHONPATH设置,要么依赖于munge sys.path.
在您的情况下,我建议您在设置正确的路径后使用一个小的Python脚本运行您的示例.假设您将其放在顶级目录中:
#!/usr/bin/env python
import sys
import os.path
sys.path.append(os.path.dirname(__file__))
example = __import__("examples", globals(), locals(), sys.argv[1])
Run Code Online (Sandbox Code Playgroud)
然后你的例子可以做"导入模块".
或者,如果module.py还要包含在软件包中,请将"顶级目录"的PARENT添加到sys.path,然后使用from .. import module示例模块中的语法.另外,将第一个参数更改为__import__包装器中的"tldname.examples",其中tldname是顶级目录的名称.
如果您不想依赖"示例运行器"模块,则每个示例都需要sys.path样板,或者您需要PYTHONPATH设置.抱歉.
| 归档时间: |
|
| 查看次数: |
6651 次 |
| 最近记录: |