你在哪里可以强迫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
在这里被使用。它是否强制创建鸡蛋安装?
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
...
背景
如果安装了压缩鸡蛋,pip似乎有时会多次安装包。更新
我发现包在哪个条件下安装为egg:如果它是通过python setup.py develop
安装的(它是一个install_requires依赖项)。
如果我使用pip install foo_client
,它会被平放(我想要的方式)。
UPDATE2
非常丑陋的部分:如果安装了鸡蛋,那么旧的版本安装不会被删除。
版本:pip 1.5.6
答案 0 :(得分:6)
这并没有解决为什么我有时会得到拉链蛋,有时候没有。但它有帮助。
您可以在~/.distutils.cfg
中使用此功能,以避免安装拉链蛋:
[easy_install]
zip_ok = False
答案 1 :(得分:2)
如果您是该软件包的作者,则可以使用zip_safe=False
中的标记setup.py
。
setup(
name = "HelloWorld",
...
zip_safe = False,
)
如果您是想要改进软件包的用户,可以按pip install -e foo_package
安装。选项-e
或--editable
以可编辑模式(即setuptools“开发模式”)安装项目,而不是压缩。它创建从源到site-packages
的链接并编译... / bin脚本,但不会将源复制到site-packages。这些软件包无法自动更新,这是它不是通常的安装软件包的主要原因,而只是那些需要定制或修复的软件包。
编辑:Django是一个典型的框架,它的应用程序需要zip_safe=False
,因为它们不是纯Python,但它们也包含带有html,css,i18n资源的模板等。是你的问题与Django有关吗?
答案 2 :(得分:1)
我遇到了这个仅限鸡蛋安装问题,结果发现我没有在我的软件包的根目录中添加__init__.py
。这让我很生气,这会起作用:
pip install .
......但这会失败:
mkdir /tmp/piptest
cd /tmp/piptest
git clone $OLDPWD .
pip install .
使用diff -r . $OLDPWD
很难注意到差异,因为有很多非提交的pyc文件和开发工具脚本。
这可能不是这个OP的答案,但我希望它可以帮助Googles" pip只安装鸡蛋的人#34;就像我一样。
答案 3 :(得分:1)
我和@guettli有同样的问题,首先解压缩并解压缩,然后运行:
pip -e install /srv/mypkg-1.1.0
其中/srv/mypkg-1.1.0/是项目/包中包含setup.py文件的顶级目录。
mypkg-1.1.0安装在site-packages中,mypkg.py列在[virtualenv] / bin
中注意:' - e'标志是可选的。
由于
答案 4 :(得分:0)
为了获得最佳性能,最好将Python软件包安装为zip文件。
和
您可以将zip_safe参数的True或False值传递给 setup()函数,或者你可以省略它。如果省略它,则为bdist_egg 命令将分析项目的内容以查看它是否可以检测到 任何阻止它在zip文件中工作的条件。
所以它可能没问题,除非......在你的情况下它并不好。我的项目试图读取文件并因压缩而失败。
值得注意的是,这只发生在python setup.py install
,而不是pip install .
@ guettli的修复工作正常,但我把它放在setup.cfg
中:
[easy_install]
zip_ok = False