【问题标题】:How are python module paths translated to filesystem paths?python 模块路径如何转换为文件系统路径?
【发布时间】:2016-07-15 21:13:57
【问题描述】:

这似乎是一个简单的问题,但我还没有找到解释我所看到的行为的答案。很难提供一个简单的复制案例,但我基本上有一个这样的包结构:

a.b.c a.b.utils

我有一个项目在a.b.c. 中有文件(我们称之为aux_project),另一个项目在a.b.da.b.utils 等中有文件(称之为main_project)。我正在尝试使用tests_require 在第一个项目的pytest 测试中导入a.b.utils。这不起作用,因为 a.b 出于某种原因来自 aux_project/a/b/__init__.pyc 而不是 virtualenv 内部,它会影响其他包(即,这个 a.b 里面只有一个 c,而不是 d 或 @987654335 @)。这只发生在测试环境中。在 ipython 中,我可以很好地加载所有包,并且它们是从 virtualenv 正确加载的。

更奇怪的是,如果我只是删除实际目录,测试确实会从 virtualenv 加载 pycs 并且一切正常(不过我需要那个目录)

python==2.7.9

发生了什么事?

【问题讨论】:

  • 我应该补充一点,没有明确设置 PYTHONPATH,并且 ipython 和测试都在同一个 venv 中运行

标签: python pytest python-module


【解决方案1】:

好的,问题只是 cwd 被添加到 PYTHONPATH 之前。 sys.path.pop(1)(0 是测试目录,由 pytest 前置)解决了该行为。

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2010-11-17
    • 2011-01-27
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 2014-04-28
    相关资源
    最近更新 更多