【发布时间】:2015-03-13 22:28:24
【问题描述】:
在哪里可以强制 pip 安装为“flat”而不是“egg”。
对我来说,这似乎是随机的。有时它安装为鸡蛋,有时安装为平面。
pip help install 仅显示一个选项--egg,它强制安装鸡蛋。但我找不到--flat 选项。
这些包来自一个自己的 pypiserver,并像这样上传:
python setup.py sdist upload -r internal
安装过程中 pip 的输出:
Best match: foo-client 2015.2
Downloading https://installserver:40443/pypi/packages/foo_client-2015.2.tar.gz
Processing foo_client-2015.2.tar.gz
Writing /home/bar_eins_daad/tmp/easy_install-z20B7b/foo_client-2015.2/setup.cfg
Running foo_client-2015.2/setup.py -q bdist_egg --dist-dir /home/bar_eins_daad/tmp/easy_install-z20B7b/foo_client-2015.2/egg-dist-tmp-GO1snX
我不知道为什么在这里使用bdist_egg。它会强制创建 egg 安装吗?
setup.py 确实使用 setuptools 而不是 distutils。
我们的 pypiserver 上的包是这样的:
tar -tzf packages/foo_client-2015.3.tar.gz
内容:
foo_client-2015.2/
foo_client-2015.2/foo_client.egg-info/
foo_client-2015.2/foo_client.egg-info/SOURCES.txt
foo_client-2015.2/foo_client.egg-info/top_level.txt
foo_client-2015.2/foo_client.egg-info/dependency_links.txt
foo_client-2015.2/foo_client.egg-info/PKG-INFO
foo_client-2015.2/setup.cfg
foo_client-2015.2/PKG-INFO
foo_client-2015.2/foo_client/
foo_client-2015.2/foo_client/models.py
...
背景
如果安装了 zipped egg,pip 似乎有时会多次安装软件包。
更新
我发现包在什么情况下被安装为 egg:如果它是通过python setup.py develop 安装的(它是一个 install_requires 依赖项)。
如果我使用pip install foo_client,它会被平装(我想要的方式)。
更新2
非常丑陋的部分:如果安装了egg,则安装的旧版本不会被删除。
版本:pip 1.5.6
【问题讨论】:
-
您能详细说明一下吗?例如,
--egg选项用于使 pip 安装一个鸡蛋(二进制)发行版(如果可用),而不是从源代码安装(默认)。你能给我们一些展示差异的示例包吗? -
是否没有公开可用的软件包表现出这种行为?
-
那么您肯定可以从那些说明您所谈论的行为的包中找到一个包。这与提供包裹的服务器无关。
-
install_requires确实将要求安装为鸡蛋。它不会删除其他版本,因为现在安装的只是一个安装依赖项。在任何情况下,您都可以在安装完成后再次删除它们。 -
我的错误,我很抱歉。我被
setup_requires搞混了。install_requires应该不导致安装鸡蛋,pip仍然会正确安装。