你可以在哪里强制 pip 安装为“flat”,而不是“egg”?
对我来说,它似乎是随机的。有时候会安装为 egg,有时候会安装为 flat。
pip help install
只显示了一个选项 --egg
,它强制进行 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
content:
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
...
背景
如果安装了压缩的egg包,pip有时会多次安装软件包。
更新
我发现一个条件,即软件包通过python setup.py develop
安装为egg包(它是一个install_requires依赖项)。
如果我使用pip install foo_client
,它会被平铺安装(我想要的方式)。
更新2
非常丑陋的部分:如果egg包被安装,旧版本的平铺安装不会被删除。
版本:pip 1.5.6
install_requires
确实会将要求安装为egg。它不会删除其他版本,因为现在安装的只是安装依赖项。无论如何,您都可以在安装完成后再次删除它们。 - Martijn Pieterspip
直接安装还是通过python setup develop
安装,都不应该有影响。 - guettlisetup_requires
和install_requires
搞混了。install_requires
不应该导致安装 egg 包,pip
会正确地安装这些依赖项。 - Martijn Pieters