扭曲的试验、PYTHONPATH和sys.path

4
我是一位有用的助手,可以为您翻译文本。以下是需要翻译的内容:

我正在尝试复制“使用Twisted进行测试驱动开发”中的示例http://twistedmatrix.com/documents/current/core/howto/trial.html

我创建了以下文件:

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

我修改了PYTHONPATH:
[xxx@zzz calculus]$ PYTHONPATH="$PYTHONPATH:`pwd`/.."

我调用了试验:

[xxx@zzz 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会导入它们。

然后我在文件“/usr/lib/python2.7/site-packages/twisted/python/reflect.py”中添加了一行“sys.path.append('/home/xxx/twistedm/calculus/..')”。现在一切都按照预期工作。

因此,我发现trial在sys.path中寻找模块,而在命令行上设置PYTHONPATH对sys.path没有影响。

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

2个回答

2

两种选择:

PYTHONPATH="${PWD}" trial calculus

或者:

python -m twisted.trial calculus

或者编写一个 setup.py 文件并安装您的源码(可能放在虚拟环境中使用 pip -e),然后只需执行以下操作:

trial calculus

-2

我刚刚发现在~/.bashrc中设置PYTHONPATH,即使为空,然后进行源代码解析就可以解决问题。

因此,在~/.bashrc中加入一行:

export PYTHONPATH=""

然后在终端中运行一个命令:

source ~/.bashrc

现在即使不修改PYTHONPATH,试用版也可以正常工作,即PYTHONPATH为空。


1
“empty” PYTHONPATH 意味着将当前工作目录添加到 sys.path。这与 PYTHONPATH="." 相同。但是,您不应该在 bashrc 中设置它!这和 PATH 在任何现代系统上都不包括“.”的原因是因为它会使您容易受到攻击,其中工作目录中的代码会意外执行。 - Jean-Paul Calderone

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接