使用python setup.py develop覆盖已安装版本
我正在开发一个软件包,这个软件包已经作为一个“蛋”文件安装在了 site-packages 目录里,并且它的路径已经添加到 easy-install.pth 文件中。
现在我发现这个软件包里有个 bug,于是我运行了 python setup.py develop
来连接我的开发目录。源代码目录的路径确实被正确添加到了 easy-install.pth 中,但它是最后添加的,这意味着当我执行 import mypackage
时,已经安装的“蛋”文件会被优先选择和导入。
我该如何让开发版本覆盖掉已经安装的这个软件包呢?
如果我这样做不对,请告诉我解决这个问题的正确方法是什么。
3 个回答
我建议使用虚拟环境,也就是一个独立的Python安装,它不会受到系统中其他安装的影响。你可以去PyPI上看看virtualenv和virtualenvwrapper这两个工具。
你可以使用 pip
来更新当前已经安装的包,只需要加上 --upgrade
这个选项。此外,pip
还可以从本地文件夹安装包,所以你可以这样做:
easy_install pip # if you don't have pip installed
pip install /your/package --upgrade
如果你在使用 pip 这个工具,
sudo pip uninstall packagename
它会提示你确认删除所有在 easy-install.pth 文件里的包,确认后就会把它们全部删掉。
然后你可以运行 setup.py develop
,这样就只会把开发版本放到 Python 的路径里。
如果你需要同一个库的多个版本,最好的办法是使用 virtualenv(还有 virtualenvwrapper 作为命令行助手)。
另外,如果你想要最简单的解决方案,而且不想用网络(我也想不出为什么会这样),你可以直接从 site-packages 创建一个符号链接,比如:
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')
这样,导入时就能从正确的位置获取到包。