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