binary 上传后,easy_install 出现 "找不到 setup 脚本" 错误怎么解决?

11 投票
3 回答
29695 浏览
提问于 2025-04-16 18:37

在我用 python setup.py bdist upload 上传了我的 Python C 扩展的二进制文件后,使用 easy_install [我的包名] 时出现了“错误:在 /tmp/easy_install/package-name-etc-etc 找不到设置脚本”的问题。

我哪里做错了呢?

3 个回答

1

有时候,你其实并不想用 easy_install 来安装一个“目录”,因为这样会去找一个叫 setup.py 的文件。简单来说,你可能是在输入 easy_install xyz/,而你真正想做的是 easy_install xyz

8

easy_install 这个工具希望找到源代码包或者叫做 egg 的文件。最好的做法是把源代码包(sdist)上传到 PyPI(或者你使用的其他分发服务器),只有在你的 Python 包里包含 C 扩展的时候,才上传 egg 文件,而且通常只针对 Windows 系统的 egg 文件(具体可以参考我在 这个问题里的回答)。

不带额外配置的 bdist 命令会生成一个 .tar.gz 或者 .zip 的压缩包,里面包含了为你当前平台编译好的 Python 文件(还有任何编译好的 C 扩展),但不包括安装程序(也就是不包含 setup.py 文件)。这个压缩包是为了手动解压到你的 site-packages 目录里而设计的,早于通过 egg 文件进行分发。如果你解压这个包,会发现里面甚至包含了你 site-packages 目录的完整绝对路径!

你可以配置 bdist 来生成 RPM 或 .deb 文件,或者一个简单的 Windows 安装程序,但这些都是为了其他分发系统提供安装包,而不是和 PyPI 及 easy_install 有关。

总的来说,在大多数情况下,最好上传一个 sdist 源代码包,让 easy_install 在安装时进行 Python 编译(生成 egg 文件)。

如果你想上传一个预编译的分发包(这个包是针对特定的 Python 版本和编译平台的),那就用 bdist_egg 命令吧。

42

这可能跟你的具体问题没有直接关系,但我提供这些信息是希望对其他人有帮助。

我在运行 easy_install xyz 时遇到了完全相同的错误。问题是我当前工作目录下有一个叫 xyz 的子文件夹,而 easy_install 本来是想在这个子文件夹里找到一个设置脚本,而不是去网上下载真正的 xyz。我临时改名我的本地 xyz 文件夹,问题就解决了。

这就是一个例子,说明你在命令行输入的参数可能会被同名的文件或文件夹意外覆盖。还有一个例子是 make:如果你运行 make test 来尝试生成你的测试目标,但恰好有一个叫 test 的文件夹,那么 make 就不会按你想要的那样工作。解决这个问题的方法是使用 虚拟目标

撰写回答