我有以下几点:
ModuleFolder
|
|-->. ModuleFile.py .
|
'-->. TestsFolder .
|
'---> UnitTest1.py
我正在尝试从父目录导入。在本例中,我尝试从测试文件夹运行"UnitTest1.py“,并从它的上一个目录(文件"ModuleFile.py")导入。
from .. import *
的用法,但我特别尝试做一个import MyModuleName
,这样我可以在单元测试中更明确,并避免名称的损坏/冲突。我正在做的事情(它对我来说是有效的)如下:
sys.path.append("../")
然后从父目录导入所需的内容。
sys.path
中?因为它是相对的。如果我从/home/workspace/MyModule/ unittest/运行,而我的模块在/home/workspace/MyModule/下,我假设,如果同事在他自己的/home/documents/MyModule.目录下的机器上运行/home/workspace/MyModule/,那么将/home/workspace/MyModule/添加到路径不一定是真的
我的问题是:
这是正确的Python吗?如果不是,这有什么问题?有没有更好的方法?或者,这真的是一个RTFM时刻,答案就在其中一个7+中,所以我已经看过了?(我看到所有人都建议使用显式路径,而不是我采用的相对路径方法)。
其他有用的信息:
发布于 2013-10-30 05:44:03
不要从测试文件夹中运行测试。从项目的根目录运行它,即模块文件夹。你应该很少需要使用sys.path
或PYTHONPATH
,当你这样做的时候,你要么给其他库带来了错误,要么让你的用户的生活变得更加艰难。
python -m TestsFolder.UnitTest1
如果您使用像py.test这样的测试运行器,您只需从您的签出的根目录运行py.test
,它就会为您找到测试。(假设您将测试命名为类似于test_unit1.py
的名称。您当前的命名方案有点不规范。;))
发布于 2013-10-30 05:27:25
最好在sys.path
生成时插入相对路径,如下所示:
import sys
sys.path.insert(0, '../')
发布于 2013-10-30 04:56:22
我的建议是:
不要装聪明,做你该做的事。例如,确保您的模块和包位于Python路径中的某个位置。
最简单的方法是在用来执行脚本的shell中设置环境变量PYTHONPATH:
$ export PYTHONPATH=/the/directory/where/your/modules/and/packages/are
$ cd /the/directory/where/your/unit/tests/are
$ python test1.py
https://stackoverflow.com/questions/19668729
复制相似问题