我有一个正在开发的包。这个包已经作为 egg 文件安装在 site-packages 目录中,egg 路径添加到 easy-install.pth。
我现在意识到包中有一个错误,所以我调用了 python setup.py develop
来连接开发目录。源目录的路径已正确添加到 easy-install.pth,但它是最新添加的,这意味着将首先选择并导入已安装的 egg,我发出 import mypackage
。
如何让开发 Hook 覆盖已安装的包?
最后,如果我做错了,请解释解决这个用例的正确策略是什么。
最佳答案
如果你正在使用 pip,
sudo pip uninstall packagename
将提示输入 easy-install.pth 中的所有包,并在确认后将其全部删除。
然后您可以执行 setup.py develop
以便只有开发分支在 python 路径中。
如果您需要同一个库的多个版本,最好的选择是使用 virtualenv (和 virtualenvwrapper 作为 bash 助手)。
另外值得一提的是,如果你想要没有任何网络流量的最简单的解决方案(我无法想象为什么),你也可以,只是来自站点包的符号链接(symbolic link),例如:
sudo ln -fs ~/django_registration/registration /usr/lib/python2.6/dist-packages/django_registration
如果您使用 pip 进行包安装(为什么不呢?),您还可以通过以下方式将开发版本添加到 easy-install.pth 中:
pip install -e hg+http://bitbucket.org/ubernostrum/django-registration/#egg=django_registration
根据评论更新:
如果只想在当前模块中使用新包,可以手动修改sys.path,如
sys.path.insert(1,'/path/to/package')
因此,导入从正确的位置开始。
关于python setup.py develop 覆盖已安装的版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201503/