阻止setup.py以egg格式安装

72 投票
2 回答
26623 浏览
提问于 2025-04-16 19:17

我该如何阻止 setup.py 安装一个包为 egg 格式?或者更好的是,怎么让 easy_install 不把包安装成 egg 格式呢?

sudo python setup.py install

原因是 PyDev 对于 egg 格式的包比较挑剔……我现在关注的包是 boto

更新:我找到了一种 强硬的方法 来解决这个问题:

sudo easy_install -m boto
cd path/to/boto-xyz.egg
sudo mv boto ..
sudo rm -rf boto-xyz.egg

2 个回答

19

多年后,还是遇到同样的问题,对之前的答案不太满意。在谷歌小组里找到了这个:

pushd /path/to/my/package/ 
python setup.py sdist 
popd 
pip install /path/to/my/package/dist/package-1.0.tar.gz

解释: python setup.py sdist 这个命令会创建一个 源代码分发包,这自然不是一个 *.egg 文件!生成的压缩包(在unix系统中是 .tar.gz,在windows中是 .zip)可以像安装其他远程模块一样用 pip 安装。它甚至不需要额外的参数!这样就能得到一个可以完全浏览的模块。

87

解决方案 1:

我觉得我可能漏掉了一些微妙或重要的东西(在这个问题被提出来几年后才看到这个页面,结果没有找到一个令人满意的答案),不过以下的方法对我来说是有效的:

python setup.py install --single-version-externally-managed --root=/

压缩的 *.egg 文件是 setuptools 的发明(我对它们不是特别喜欢,但我明白它们为什么会被创造出来)。因为 setup.py 脚本使用了(并可能需要)setuptools,所以这个包最终会作为一个压缩的 *.egg 文件被安装。

解决方案 2:

上面的命令行选项与 pip(Python 的包管理工具)使用的选项 类似,这暗示了另一种方法,可以阻止包被安装为压缩的 *.egg 文件:直接使用 pip!如果你有一个包含 setup.py 脚本的目录,你可以在那个目录下运行以下命令来使用 pip 安装这个包:

pip install .

这个方法比上面的 setup.py 命令更好,因为它可以跟踪额外的元数据(例如,跟踪已安装的文件,这样可以更可靠地进行卸载)。

撰写回答