在使用python setup.py bdist upload
上传我的Python C扩展的二进制分发版之后,easy_install [my-package-name]
失败了“错误:无法在/ tmp / easy_install / package-name-etc-etc.中找到设置脚本”。
我究竟做错了什么?
这可能与您的具体问题无关,但我提供此信息以防其他人有用。
我在运行easy_install xyz
时遇到了这个错误。问题是我在当前工作目录中有一个名为xyz
的子目录,easy_install期望在该子目录中找到本地安装脚本,而不是去网上获取真正的xyz
。重命名我的本地xyz目录暂时解决了问题。
这是许多情况之一,在这种情况下,您提供的命令行参数可能会被同名的文件或文件夹无意中隐藏。另一个例子是make
:如果你运行make test
试图制作你的测试目标并且你碰巧有一个名为test
的文件夹,那么make
就不会做你想要的。在这种情况下的解决方案是指示Phony Targets。
easy_install希望找到源代码分发或者一个鸡蛋。最好将源代码分发(sdist
)上传到PyPI(或者你正在使用的任何分发服务器),如果你的python软件包包含C扩展,那么只上传egg,然后只用于Windows egg(请参阅我对Can I create a single egg for multiple versions of python?的回答)。
没有额外配置的bdist
命令创建了一个.tar.gz
或.zip
存档,其中包含已编译的python文件(以及编译的任何C扩展),用于当前平台,无安装程序(因此不包括setup.py
文件)。它旨在手动打包您的站点包装位置和通过鸡蛋分发前的日期。如果您要解压缩它,您会注意到它甚至包含了tarball中site-packages目录的完整绝对路径!
您可以将bdist
配置为生成RPM或.deb文件,或简单的Windows安装程序,但这些文件再次旨在为与PyPI和easy_install无关的其他分发系统提供安装包。
因此,总而言之,在大多数情况下,最好上传一个sdist
源代码分发,并让easy_install在安装时进行python编译(进入一个鸡蛋)。
如果您确实想要上传预编译的发行版(然后将其绑定到特定的Python版本以及编译它的平台),请使用bdist_egg
命令。
有时你实际上并不打算easy_install'目录',它将寻找一个setup.py文件。简单来说,你可能正在做easy_install xyz/
而你真正想做的是easy_install xyz