【发布时间】:2015-07-03 15:14:19
【问题描述】:
我对 python 比较陌生,遇到了一个我无法解决的问题。我有一个依赖于模块 B 的模块 A。通常,A 下载 B 并将其与其余的鸡蛋一起存储在我的 virtualenv 站点包中。现在,我想使用 B 的本地版本而不是下载的 B 版本,但无论我做什么,A 仍然在其站点包中使用 B,而不是我在 PYTHONPATH 中指定的那个。
我知道我的本地 B 设置正确,因为如果我将它添加到我的 PYTHONPATH 并且我没有使用 virtualenv,我可以很好地使用它。
如果我打开 ipython 并将本地 B 附加到 PYTHONPATH,我会看到我的 sys.path 首先列出了站点包版本,然后是我的 PYTHONPATH 中的目录。如果我做了一些 hacky,比如颠倒 sys.path 的顺序并尝试加载 B,它仍然使用站点包中的 B。我发现解决这个问题的唯一方法是创建一个从我的站点包中的 B 到我的本地 B 的符号链接,并删除我本地 B 中的所有 *.pyc 文件。必须有一个更好的方法要做到这一点......任何帮助都会很棒。谢谢!
我不确定这是否重要,但作为参考,我正在使用以下版本的东西:
- virtualenv 12.1.1
- python 2.7
- 模块 A 和 B 是我公司的内部库
- Ubuntu 12.04.5 LTS
【问题讨论】:
-
你可以卸载远程版本和
pip install -e本地吗? -
你需要卸载包 B(从你的站点包中),然后确保你的 B 的本地副本可以在你的 PYTHONPATH 中的某个地方访问(可导入)。
-
@tzaman 实际上效果很好。当我对本地版本进行更改时,我什至不必重做 pip 安装。我仍然希望找到为什么 PYTHONPATH 不起作用的答案,但这是我手头任务的可行解决方案。谢谢!
-
@LizBennett 太棒了!我已将其发布为更详细的答案。
标签: python python-2.7 virtualenv python-module