【问题标题】:python setup.py develop to override installed versionpython setup.py develop 覆盖已安装的版本
【发布时间】:2011-06-01 12:57:57
【问题描述】:

我有一个正在开发的包。这个包已经作为一个 egg 文件安装在 site-packages 目录中,egg 路径添加到 easy-install.pth。

我现在意识到我的包中有一个错误,所以我调用了python setup.py develop 来连接开发目录。源目录的路径已正确添加到 easy-install.pth,但它是最新添加的,这意味着将首先选择并导入已安装的 egg,我发出 import mypackage

如何让开发钩子覆盖已安装的包?

最后,如果我做错了,请解释解决这个用例的正确策略是什么。

【问题讨论】:

  • 你在使用distutils吗?哪个版本?

标签: python distutils


【解决方案1】:

如果你使用的是 pip,

sudo pip uninstall packagename

将提示输入 easy-install.pth 中的所有软件包,并在确认后将其全部删除。

然后您可以执行setup.py develop,以便只有开发分支位于 python 路径中。

如果您需要同一个库的多个版本,最好的选择是使用virtualenv(和virtualenvwrapper 作为 bash 助手)。

另外值得一提的是,如果您想要没有任何网络流量的最简单的解决方案(我无法想象为什么),您也可以只使用站点包中的符号链接,例如:

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')

因此,导入从正确的位置开始。

【讨论】:

  • 重点是我不想删除 stable 包。我想覆盖它,至少一段时间。不是标准包,是乱码,安装使用需要我开发的打补丁的python。
  • 更新了答案以手动修改 sys.path,对于这种情况。
  • 我没有任何构建的包可以参考。我可以将其构建为鸡蛋,然后按照您的指示进行操作,但这会破坏开发的全部意义:进行更改并立即查看它们而无需重建。正如我所看到的,唯一的问题是develop在easy-install.pth中添加了新条目作为最后一个条目,而不是第一个条目,因此首先找到了已经安装的包(也在easy-install.pth中)。
  • 你可以添加路径,也就是easy-install.pth最后,手动在上面sys.path.insert(1,'/path/to/package')吧?
  • 应该是sys.path.insert(0,'/path/to/package'),对吧?这意味着它将成为路径中的 first 元素。以防万一您当前的目录是模块的不同版本(因为 '' 通常是 sys.path[0])。
【解决方案2】:

您可以要求pip 使用--upgrade 覆盖当前安装的软件包,并且pip 可以从本地目录安装:

easy_install pip # if you don't have pip installed
pip install /your/package --upgrade

【讨论】:

  • 应该使用 install -e 在开发/可编辑模式下安装,即链接而不是复制,以便测试运行程序或其他 Python 程序立即看到结帐中的更改。
  • OP 在他的评论中解释说,关键是我不想删除 stable 包。
【解决方案3】:

我会使用虚拟环境,即不受系统范围内安装的发行版影响的独立 Python 安装。请参阅 PyPI 上的 virtualenv 和 virtualenvwrapper。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-30
    • 2012-10-03
    • 2021-12-15
    • 1970-01-01
    • 2018-11-20
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多