2017-02-23 68 views
3

我试图从http://twistedmatrix.com/documents/current/core/howto/trial.html的“Twisted的测试驱动开发”中重现这个例子。Twisted trial,PYTHONPATH和sys.path

我创建的文件:

calculus/__init__.py 
calculus/base_1.py 
calculus/test/__init__.py 
calculus/test/test_base_1.py 

我修改PYTHONPATH:

[[email protected] calculus]$ PYTHONPATH="$PYTHONPATH:`pwd`/.." 

我调用审判:

[[email protected] twistedm]$ trial calculus.test.test_base_1 
calculus 
    test 
    test_base_1 ...              [ERROR] 

=============================================================================== 
[ERROR] 
Traceback (most recent call last): 
    File "/usr/lib/python2.7/site-packages/twisted/trial/runner.py", line 602, in loadByNames 
    things.append(self.findByName(name)) 
    File "/usr/lib/python2.7/site-packages/twisted/trial/runner.py", line 406, in findByName 
    return reflect.namedAny(name) 
    File "/usr/lib/python2.7/site-packages/twisted/python/reflect.py", line 307, in namedAny 
    raise ObjectNotFound('%r does not name an object' % (name,)) 
twisted.python.reflect.ObjectNotFound: 'calculus.test.test_base_1' does not name an object 

calculus.test.test_base_1 
------------------------------------------------------------------------------- 
Ran 1 tests in 0.199s 

FAILED (errors=1) 

的Python没有找到我的模块。

但是,如果我调用python shell并尝试导入我的模块,python会导入它们。

然后我添加了一行 “sys.path.append( '/家庭/ XXX/twistedm /结石/ ..')” 到文件“/usr/lib/python2.7/site-packages/ twisted/python/reflect.py“。现在全部都按原样运作。

所以我发现试用版在sys.path中查找模块,并且在命令行上设置PYTHONPATH对sys.path没有任何影响。

问题是如何在调用trial时从命令行修改sys.path。

回答

-1

我刚刚发现,在〜/ .bashrc中设置PYTHONPATH,甚至是空的,然后采用它来解决问题。

所以,放线在〜/ .bashrc:

export PYTHONPATH="" 

然后在终端中运行命令:

source ~/.bashrc 

现在审判工作,即使没有修改PYTHONPATH,我。即与空的PYTHONPATH。

+1

“空“PYTHONPATH的意思是”将当前工作目录添加到sys.path“。这与PYTHONPATH =“。”相同。而且你不应该在你的bashrc中设置这个!出于同样的原因,PATH不包括“。”。在任何现代系统上 - 因为它使你容易受到工作目录中代码意外执行的攻击。 –

1

或者:

PYTHONPATH="${PWD}" trial calculus 

或者:

python -m twisted.trial calculus 

或写setup.py和安装源(与pip -e一个virtualenv中,可能),然后就:

trial calculus