Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么有时安装为egg,有时安装为文件_Python_Pip_Egg - Fatal编程技术网

Python 为什么有时安装为egg,有时安装为文件

Python 为什么有时安装为egg,有时安装为文件,python,pip,egg,Python,Pip,Egg,在哪里可以强制pip安装为“扁平”而不是“鸡蛋” 对我来说,这似乎是随机的。有时它被安装成蛋形,有时是扁平的 pip help install仅显示强制安装egg的选项--egg。但是我找不到一个--flat选项 这些包来自自己的pypiserver,上传方式如下: tar -tzf packages/foo_client-2015.3.tar.gz python setup.py sdist upload-r internal 安装期间的pip输出: Best match: foo-clie

在哪里可以强制pip安装为“扁平”而不是“鸡蛋”

对我来说,这似乎是随机的。有时它被安装成蛋形,有时是扁平的

pip help install
仅显示强制安装egg的选项
--egg
。但是我找不到一个
--flat
选项

这些包来自自己的pypiserver,上传方式如下:

tar -tzf packages/foo_client-2015.3.tar.gz
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\u 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
...
背景

如果安装了压缩鸡蛋,pip有时似乎会多次安装软件包

更新

我发现在什么条件下,包会被安装为egg:如果它是通过
python setup.py develope安装的(这是一个install\u需要依赖项)

如果我使用
pip-install-foo\u-client
,它会以我想要的方式安装

更新2

最难看的部分:如果安装了egg,则平放安装的旧版本不会被删除


版本:pip1.5.6

我遇到了这个只安装egg的问题,结果是我无法在我的包的根目录中添加
\uuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuupy
。这会让我发疯的:

pip install .
……但这将失败:

mkdir /tmp/piptest
cd /tmp/piptest
git clone $OLDPWD .
pip install .
使用
diff-r很难注意到差异$OLDPWD
,因为有太多未提交的pyc文件和开发工具脚本

这可能不是这篇文章的答案,但我希望它能帮助像我一样在谷歌上搜索“pip只安装鸡蛋”的人。

如果你是这个软件包的作者,你可以在
setup.py
中使用标志
zip\u safe=False

setup(
    name = "HelloWorld",
    ...
    zip_safe = False,
)
如果您是希望改进软件包的用户,可以通过
pip install-e foo_package
安装它。选项
-e
--editable
以可编辑模式(即setuptools“开发模式”)安装项目,而不是压缩。它创建一个从源代码到
站点包
的链接,并编译
../bin
脚本,但不会将源代码复制到“站点包”中。这些包无法自动更新。这就是为什么它不是安装软件包的常用方法,而只是用于那些需要定制或修复的软件包的主要原因


编辑:是一个典型的框架,它的应用程序需要
zip_safe=False
,因为它们不是纯Python,但它们也包含html、css、i18n资源等模板。您的问题与Django有关吗?

这并不能解决为什么我有时会得到压缩鸡蛋,有时不会得到压缩鸡蛋的问题。但它有帮助

您可以在
~/.distutils.cfg
中使用此选项,以避免安装压缩鸡蛋:

[easy_install]
zip_ok = False
说:

为了获得最佳性能,最好将Python包安装为zip文件

您可以将zip_safe参数的True或False值传递给 函数,也可以忽略它。如果你忽略了它,B就是蛋 命令将分析项目的内容,以查看是否可以检测到 任何可能阻止其在zipfile中工作的条件

所以除非。。。你的情况不好。我的项目尝试读取文件,但由于压缩失败

值得注意的是,这只发生在
python setup.py安装中,而不是
pip安装中。
@guettli的修复程序运行良好,但我将其放在
setup.cfg中:

[easy_install]
zip_ok = False

我遇到了与@guettli相同的问题,通过先解压并提取归档文件,然后运行,解决了这个问题:

pip-e安装/srv/mypkg-1.1.0

其中/srv/mypkg-1.1.0/是包含setup.py文件的项目/包的顶级目录

mypkg-1.1.0安装在站点软件包中,mypkg.py列在[virtualenv]/bin中

注意:“-e”标志是可选的


谢谢

你能详细说明一下吗?例如,
--egg
选项用于让pip安装egg(二进制)发行版(如果可用),而不是从源代码安装(默认)。你能给我们一些显示差异的示例软件包吗?是否没有公开的软件包显示这种行为?那么你肯定可以从这些软件包中找到一个说明你所谈论的行为的软件包。这与为包提供服务的服务器无关。
install\u requires
确实会将需求作为一个鸡蛋来安装。它不会删除其他版本,因为现在安装的只是安装依赖项。在任何情况下,您都可以在安装完成后再次删除这些。我的错误,我的道歉。我被
设置所需的
搞混了
install\u requires
不应导致安装鸡蛋,
pip
仍将正确安装这些鸡蛋。遗憾的是,我不是该软件包的作者。我现在找到了解决办法。请看,在编写自己的包时,这实际上对于控制*.egg文件夹的创建非常有用。非常感谢。谢谢,我刚刚修复了一个django软件包:-自从发布我学会了带“-e”的“pip安装”,可编辑选项;以“devOper模式”安装程序包。在项目目录中创建/srv/mypkg-1.1.0/mypkg.egg-info目录。可以编辑源代码,而无需每次构建包。不建议用于生产安装。因此,根据我最初的帖子,我不确定是从tarball安装还是从平面文件安装,因为我第一次安装它时,tarball位于/tmp中,据我所知,egg info目录可能是在那里创建的。我必须测试以确认。为我的包添加子文件夹(和