二进制上传后,easy_install 因错误“找不到安装脚本”而失败?
Posted
技术标签:
【中文标题】二进制上传后,easy_install 因错误“找不到安装脚本”而失败?【英文标题】:easy_install fails on error "Couldn't find setup script" after binary upload? 【发布时间】:2011-09-04 22:33:14 【问题描述】:在使用 python setup.py bdist upload
上传我的 Python C 扩展的二进制分发后,easy_install [my-package-name]
失败并出现“错误:在 /tmp/easy_install/package-name-etc-etc 中找不到安装脚本”。
我做错了什么?
【问题讨论】:
【参考方案1】:这可能与您的具体问题无关,但我提供此信息以防对其他人有帮助。
我在运行easy_install xyz
时遇到了这个错误。问题原来是我在当前工作目录中有一个名为xyz
的子目录,而easy_install 期望在该子目录中本地找到一个安装脚本,而不是通过网络获取真正的xyz
。重命名我的本地 xyz 目录暂时解决了这个问题。
这是您提供的命令行参数可能无意中被同名文件或文件夹遮蔽的多种情况之一。另一个例子是make
:如果您运行make test
以尝试创建您的测试目标,并且您碰巧有一个名为test
的文件夹,那么make
将不会执行您想要的操作。这种情况下的解决方案是指明Phony Targets。
【讨论】:
您甚至不需要更改目录的名称。修复就像输入cd ..
并从不同的cwd 再次尝试easy_install 一样简单。我建议在查看 Martijn 的答案之前对此进行测试,因为这是一个简单的问题。
哇,我自己需要一段时间才能意识到这一点。很好的答案。
"问题原来是我在当前工作目录下有一个名为xyz的子目录"我觉得这是一种普遍的问题。【参考方案2】:
easy_install 期望找到一个源代码发行版或一个鸡蛋。最好将源分发 (sdist
) 上传到 PyPI(或您正在使用的任何分发服务器),并且仅在您的 python 包包含 C 扩展时才上传鸡蛋,然后仅适用于 Windows 鸡蛋(请参阅我对 Can I create a single egg for multiple versions of python? 的回答) .
bdist
命令无需额外配置即可创建一个.tar.gz
或.zip
存档,其中包含为您当前平台编译的python 文件(以及编译的任何C 扩展),无安装程序(因此不包括setup.py
文件)。它用于在您的站点包位置手动解包并通过鸡蛋提前分发。如果您要解压缩它,您会注意到它甚至在 tarball 中包含了站点包目录的完整绝对路径!
您可以配置 bdist
以生成 RPM 或 .deb 文件,或简单的 Windows 安装程序,但这些再次旨在为与 PyPI 和 easy_install 无关的其他分发系统提供安装包。
因此,总而言之,在大多数情况下,最好上传一个sdist
源代码分发并让easy_install 在安装时进行python 编译(到一个鸡蛋中)。
如果您确实要上传预编译的发行版(然后将其绑定到特定的 Python 版本和编译它的平台),请改用 bdist_egg
命令。
【讨论】:
【参考方案3】:有时您实际上并不真正打算轻松安装“目录”,它会查找 setup.py 文件。
简单来说,你可能在做easy_install xyz/
而你真正想做的是easy_install xyz
【讨论】:
以上是关于二进制上传后,easy_install 因错误“找不到安装脚本”而失败?的主要内容,如果未能解决你的问题,请参考以下文章
python windows 下pip easy_install 使用错误的问题
将应用程序上传到 iTune Connect 时出现无效二进制错误