阻止setup.py以egg格式安装
我该如何阻止 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
命令更好,因为它可以跟踪额外的元数据(例如,跟踪已安装的文件,这样可以更可靠地进行卸载)。