【发布时间】:2017-04-14 10:15:53
【问题描述】:
我正在为我的 GitHub 存储库设置 Travis-CI,在创建测试时,我意识到我遇到了问题。
我的文件结构是这样的:
parent-dir:
src:
prog.py
generator.py
test:
test.py
Travis 设置为运行 test.py 文件,然后依次执行以下命令:
variables = {'help': '-h'}
execfile(sys.path[0] + "/../src/prog.py", variables)
这可以正常工作。但是问题是,prog.py 将 generator.py 导入为:
from generator import generate, languages
运行测试时,出现错误:ImportError: No module named generator。
我做了一些窥探,发现sys.path[0]在我执行第二个文件时没有更新。
我的问题是,有没有办法在执行另一个文件时获取更新路径,或者有更好的方法来简单地获取正在执行的模块的位置?
我的代码如下:
test.py
import os
import unittest2
import tests # Self reference for working directory.
relative_dir = os.path.dirname(tests.__file__)
class Test(unittest2.TestCase):
def test_program(self):
msg('Attempting to generate example utility.') # just prints the message, nothing interesting
variables = {'help': '-h'} # command line variables
execfile(relative_dir + "/../src/prog.py", variables)
prog.py
import os
import prog # This file.
relative_dir = os.path.dirname(dash_h.__file__)
我不会费心显示generator.py,因为这已经足够完整了。无论生成器如何,即使只是简单地从自身导入 prog 也会引发完全相同的错误。
ImportError: No module named prog
我正在终端中从父目录执行以下命令:
python -B test/test.py
如果后者存在,我实际上希望将其合并到我拥有的所有其他文件中。
【问题讨论】:
-
你来这里的目的是什么?你到底想完成什么?
-
@Code-Apprentice 我正在使用
unittest2来测试另一个文件夹中的文件。但我不想简单地运行一个函数,我想用参数执行它,就好像它是从命令行执行一样。 -
如果从同一个目录执行同样的命令,是否有效?
-
@finnrayment 请提供一个最小的完整示例。这不应该是您的整个代码。事实上,在这种情况下,你应该只是编造一个非常人为的例子来展示你想要完成的事情。
-
@finnrayment 请再次阅读我之前的评论并查看帮助部分以获取有关创建 MCVE 的提示。
标签: python path python-import