使用本地目录覆盖virtualenv中的模块

时间:2015-04-24 20:53:49

标签: python python-2.7 virtualenv python-module

我对python很新,遇到了一个我无法解决的问题。我有一个依赖于模块B的模块A.通常,A下载B并将其与其他鸡蛋一起存储在我的virtualenv site-packages中。现在,我有一个本地版本的B我想要使用而不是这个下载版本的B但是无论我做什么,A仍然在其网站包中使用B而不是我在PYTHONPATH中指定的那个。

我知道我的本地B设置正确,因为我可以使用它,如果我将它添加到我的PYTHONPATH并且我没有使用virtualenv。

如果我打开ipython并将本地B添加到PYTHONPATH之前,我会看到我的sys.path首先列出了site-packages版本,然后我的PYTHONPATH中的目录。如果我做了一些hacky,比如反转sys.path的顺序并尝试加载B,那么仍然使用来自site-packages的B。我发现解决这个问题的唯一方法是从我的站点包中的B创建一个sym链接到我的本地B并删除我本地B中的所有* .pyc文件。只需要一个更好的方法来做到这一点......任何帮助都会很棒。谢谢!

我不确定这是否重要但仅供参考我使用以下版本的内容:

  • virtualenv 12.1.1
  • python 2.7
  • 模块A和B是我公司的内部库
  • Ubuntu 12.04.5 LTS

2 个答案:

答案 0 :(得分:1)

If you're working on a pair of related projects where one depends on the other, you can just uninstall the "remote" version and use pip install -e to install it from your local copy in editable mode.

This will let your dependent project see it, and automatically see changes to the upstream project without needing any extra work.

答案 1 :(得分:0)

在查看当前目录之前,Python将始终在install dir(site-packages)中查找包。如果/当它在安装目录中找到一个包时,它就会停止查找。

如果您想要这样做,您可以明确地引用您的本地副本。

from . import ModuleB
from .. import ModuleB
#etc