Mik*_*att 5 python pythonpath sys.path
我有一个具有包层次结构的应用程序。有相当多的模块引用了包层次结构中更高的其他模块。如下所示,我可以使用相对导入来解决这个问题。但是,直接运行模块进行测试会失败并出现Attempted relative import in non-package异常。
有没有更好的方法来组织我的应用程序或我的导入语句,以便模块可以单独执行以进行测试并从其他模块导入?
\spam
\morespam
child.py
base.py
\eggs
user.py
Run Code Online (Sandbox Code Playgroud)
基础文件
class Base(object):
def hello(self):
print 'Um, wot?'
Run Code Online (Sandbox Code Playgroud)
孩子.py
from ..base import Base # references the parent package correctly,
# but fails when this module is executed individually
class Child(Base):
def hello(self):
print 'Hello, world!'
if __name__ == '__main__':
import unittest
# ... unit test code ...
Run Code Online (Sandbox Code Playgroud)
用户.py
from spam.morespam.child import Child
print Child().hello()
Run Code Online (Sandbox Code Playgroud)
我发现我可以将以下标题添加到需要引用层次结构中更高模块的模块的顶部:
if __name__ == '__main__':
import sys, os
sys.path.append(os.path.abspath(os.path.join(sys.path[0], '..')))
Run Code Online (Sandbox Code Playgroud)
缺点是我需要到处添加此代码,并且它不是恒定的:'..'相对路径根据层次结构中包的深度而变化。
python.exe whatever.py。| 归档时间: |
|
| 查看次数: |
1386 次 |
| 最近记录: |