binary 上传后,easy_install 出现 "找不到 setup 脚本" 错误怎么解决?
在我用 python setup.py bdist upload
上传了我的 Python C 扩展的二进制文件后,使用 easy_install [我的包名]
时出现了“错误:在 /tmp/easy_install/package-name-etc-etc 找不到设置脚本”的问题。
我哪里做错了呢?
3 个回答
有时候,你其实并不想用 easy_install 来安装一个“目录”,因为这样会去找一个叫 setup.py 的文件。简单来说,你可能是在输入 easy_install xyz/
,而你真正想做的是 easy_install xyz
。
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
命令吧。
这可能跟你的具体问题没有直接关系,但我提供这些信息是希望对其他人有帮助。
我在运行 easy_install xyz
时遇到了完全相同的错误。问题是我当前工作目录下有一个叫 xyz
的子文件夹,而 easy_install 本来是想在这个子文件夹里找到一个设置脚本,而不是去网上下载真正的 xyz
。我临时改名我的本地 xyz 文件夹,问题就解决了。
这就是一个例子,说明你在命令行输入的参数可能会被同名的文件或文件夹意外覆盖。还有一个例子是 make
:如果你运行 make test
来尝试生成你的测试目标,但恰好有一个叫 test
的文件夹,那么 make
就不会按你想要的那样工作。解决这个问题的方法是使用 虚拟目标。