Python Cookbook为“典型的库包”建议了以下树结构:
projectname/
README.txt
Doc/
documentation.txt
projectname/
__init__.py
foo.py
bar.py
utils/
__init__.py
spam.py
grok.py
examples/
helloworld.py
您会注意到examples/
不是实际包的一部分,它位于下面projectname/projectname/
(您可以在其中找到包的顶层__init__.py
)。
嗯,examples/helloworld.py
显然需要导入projectname
包。
我知道 StackOverflow 中至少有 2-3 个相关问题。我不认为这是重复的,因为其他问题要么涉及包内导入,要么涉及从另一个 python 模块导入一个 python 模块的一般情况,当它们不位于同一目录中时。我在打包库时特别要求建议的方法来执行此操作。
有没有办法在不修改路径的情况下实现这一点?如果修改路径是唯一的方法,有没有办法以优雅的方式完成?
让我详细说明最后一点。在Kenneth Reitz 的Repository Structure and Pythontests/
中,出现了类似的结构,用examples/
. 这是完全相同的问题。他建议使用“简单(但明确)的路径修改来正确解析包”。好的,但这是实际代码:
import os
import sys
sys.path.insert(0, os.path.abspath('..'))
我真的不喜欢这个..
部分。我希望有一个更通用的解决方案,希望可以从我选择运行示例(或测试)的任何目录中工作。