在execfile上更改sys.path

时间:2017-04-14 10:15:54

标签: python path python-import

我正在为我的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

我正在终端中从parent-dir目录执行以下命令:

python -B test/test.py

如果存在后者,我实际上想将其合并到我拥有的所有其他文件中。

1 个答案:

答案 0 :(得分:0)

我的建议是将路径作为命令行参数传递给输入文件。