为什么PyPI不使用setup.py元数据?
我在PyPi上发布了我的软件包的测试版本。
在setup.py文件中的一些基本信息(比如主页、分类等)显示在了项目的PyPi页面上。
后来,我更新了这个项目。唯一改变的就是setup.py里的版本号。
更新: 像往常一样,别轻易相信别人说的话。我把工具从setuptools换成了distutils!这有点像盲目模仿编程——我只是照搬了另一个项目的做法。抱歉。
但是在项目的PyPi页面上,下一版本却没有任何基本信息。
我正在努力找出我哪里出错了;我觉得在PyPi上搞定这些事情挺麻烦的,所以我肯定是我自己搞错了。这次,我在一个相对新的Windows系统上使用了Python 2.7.1(之前我用的是Python 2.6.x)。
我几乎可以肯定这次我用了不同的命令行来上传它。(这次似乎需要签名和安装pgp,而我不记得上次需要这些)。
我应该去哪里查找,为什么setup.py文件中的基本信息没有被上传呢?
2 个回答
这个问题不太好回答。你能告诉我们你使用的命令行是什么吗?你的setup.py是用distutils还是setuptools?在这两次之间,你有没有修改过pydistutils.cfg或.pypirc文件?
在你的setup.py文件中运行以下命令应该能解决问题:
$ python setup.py register
理想情况下,你应该在上传的时候一起运行注册命令。我通常在发布任何包的时候至少会用到三个命令(sdist、register、upload)。下面的命令可以用来进行一次典型的PyPI发布:
$ python setup.py sdist register upload
接下来我会简单解释一下这些命令的作用。
sdist命令是几种构建命令之一,它会生成源代码的分发包。你可能已经很熟悉这个命令,因为你上传过.zip文件。还有一个类似的命令是bdist,它用来生成二进制分发包。
分发包(或称为包)的元数据是和构建的分发包分开发送的。setuptools的upload命令会上传你的项目构建(比如myproject-0.0.zip)。而register命令则用来更新元数据信息。注册命令会把PKGINFO(或egg_info)以PyPI能理解的格式发送过去。