pip:为什么有时安装为 egg,有时安装为文件
pip: Why sometimes installed as egg, sometimes installed as files
在哪里可以强制 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
内容:
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 eggs,pip 似乎有时会安装几次包。
更新
我发现包在什么情况下作为 egg 安装:如果它是通过 python setup.py develop
安装的(它是 install_requires 依赖)。
如果我使用 pip install foo_client
它会平整安装(我想要的方式)。
更新2
非常丑陋的部分:如果安装了 egg,则不会删除安装的旧版本。
版本:pip 1.5.6
我遇到了这个 egg-only 安装问题,结果我没能 git 在我的根目录中添加 __init__.py
包裹。这行得通让我发疯:
pip install .
...但这会失败:
mkdir /tmp/piptest
cd /tmp/piptest
git clone $OLDPWD .
pip install .
很难注意到使用 diff -r . $OLDPWD
的差异,因为有太多未提交的 pyc 文件和开发工具脚本。
这可能不是此 OP 的答案,但我希望它能帮助像我一样使用 Google "pip only installing the egg" 的人。
如果您是包的 作者,您可以在 setup.py
.
中使用标志 zip_safe=False
setup(
name = "HelloWorld",
...
zip_safe = False,
)
如果您是用户想要改进软件包,您可以通过pip install -e foo_package
安装它。选项 -e
或 --editable
以可编辑模式(即 setuptools“开发模式”)安装项目,而不是压缩。它从源代码创建一个 link 到 site-packages
并编译 .../bin
脚本,但它不会将源代码复制到“站点包”中。这些包不能自动更新。这是为什么它不是作为安装包的常用方式,而是仅用于那些需要定制或修复的包的主要原因。
编辑:Django 是一个典型的框架,它的应用程序需要 zip_safe=False
,因为它们不是纯粹的 Python,但它们还包含带有 html 的模板, css, i18n resources 等。您的问题与 Django 相关吗?
这并没有解决为什么我有时会收到压缩鸡蛋,有时却没有的问题。但它有帮助。
您可以在 ~/.distutils.cfg
中使用它来避免安装压缩蛋:
[easy_install]
zip_ok = False
Some docs 说:
For maximum performance, Python packages are best installed as zip files.
和
You can pass a True or False value for the zip_safe argument to the
setup() function, or you can omit it. If you omit it, the bdist_egg
command will analyze your project’s contents to see if it can detect
any conditions that would prevent it from working in a zipfile.
所以它可能没问题,除非......它对你的情况不好。我的项目试图读取文件但由于压缩而失败。
值得注意的是,这只发生在 python setup.py install
,而不是 pip install .
@guettli 的修复工作正常,但我把它放在 setup.cfg
:
[easy_install]
zip_ok = False
我遇到了与@guettli 相同的问题,并通过先解压缩和解压缩存档然后 运行:
解决了这个问题
pip -e 安装/srv/mypkg-1.1.0
其中 /srv/mypkg-1.1.0/ 是 project/package 的顶级目录,其中有一个 setup.py 文件。
mypkg-1.1.0 已安装在站点包中,mypkg.py 已在 [virtualenv]/bin
中列出
注意:“-e”标志是可选的。
谢谢
在哪里可以强制 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
内容:
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 eggs,pip 似乎有时会安装几次包。
更新
我发现包在什么情况下作为 egg 安装:如果它是通过 python setup.py develop
安装的(它是 install_requires 依赖)。
如果我使用 pip install foo_client
它会平整安装(我想要的方式)。
更新2
非常丑陋的部分:如果安装了 egg,则不会删除安装的旧版本。
版本:pip 1.5.6
我遇到了这个 egg-only 安装问题,结果我没能 git 在我的根目录中添加 __init__.py
包裹。这行得通让我发疯:
pip install .
...但这会失败:
mkdir /tmp/piptest
cd /tmp/piptest
git clone $OLDPWD .
pip install .
很难注意到使用 diff -r . $OLDPWD
的差异,因为有太多未提交的 pyc 文件和开发工具脚本。
这可能不是此 OP 的答案,但我希望它能帮助像我一样使用 Google "pip only installing the egg" 的人。
如果您是包的 作者,您可以在 setup.py
.
zip_safe=False
setup(
name = "HelloWorld",
...
zip_safe = False,
)
如果您是用户想要改进软件包,您可以通过pip install -e foo_package
安装它。选项 -e
或 --editable
以可编辑模式(即 setuptools“开发模式”)安装项目,而不是压缩。它从源代码创建一个 link 到 site-packages
并编译 .../bin
脚本,但它不会将源代码复制到“站点包”中。这些包不能自动更新。这是为什么它不是作为安装包的常用方式,而是仅用于那些需要定制或修复的包的主要原因。
编辑:Django 是一个典型的框架,它的应用程序需要 zip_safe=False
,因为它们不是纯粹的 Python,但它们还包含带有 html 的模板, css, i18n resources 等。您的问题与 Django 相关吗?
这并没有解决为什么我有时会收到压缩鸡蛋,有时却没有的问题。但它有帮助。
您可以在 ~/.distutils.cfg
中使用它来避免安装压缩蛋:
[easy_install]
zip_ok = False
Some docs 说:
For maximum performance, Python packages are best installed as zip files.
和
You can pass a True or False value for the zip_safe argument to the setup() function, or you can omit it. If you omit it, the bdist_egg command will analyze your project’s contents to see if it can detect any conditions that would prevent it from working in a zipfile.
所以它可能没问题,除非......它对你的情况不好。我的项目试图读取文件但由于压缩而失败。
值得注意的是,这只发生在 python setup.py install
,而不是 pip install .
@guettli 的修复工作正常,但我把它放在 setup.cfg
:
[easy_install]
zip_ok = False
我遇到了与@guettli 相同的问题,并通过先解压缩和解压缩存档然后 运行:
解决了这个问题pip -e 安装/srv/mypkg-1.1.0
其中 /srv/mypkg-1.1.0/ 是 project/package 的顶级目录,其中有一个 setup.py 文件。
mypkg-1.1.0 已安装在站点包中,mypkg.py 已在 [virtualenv]/bin
中列出注意:“-e”标志是可选的。
谢谢