【发布时间】:2013-03-04 17:19:27
【问题描述】:
我昨晚提交了我的第一个 PyPI 项目,但事情没有按预期工作(警告前面的帖子很长)...
我最初通过命令行上传了项目cvrfparse:
% python setup.py sdist upload
这很好地创建了初始项目。但是尝试通过 pip 安装项目,因此失败了:
% sudo pip install cvrfparse
Password:
Downloading/unpacking cvrfparse
Running setup.py egg_info for package cvrfparse
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "/private/tmp/pip-build-root/cvrfparse/setup.py", line 3, in <module>
from distribute_setup import use_setuptools
ImportError: No module named distribute_setup
Complete output from command python setup.py egg_info:
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "/private/tmp/pip-build-root/cvrfparse/setup.py", line 3, in <module>
from distribute_setup import use_setuptools
ImportError: No module named distribute_setup
----------------------------------------
Command python setup.py egg_info failed with error code 1 in /private/tmp/pip-build-root/cvrfparse
Storing complete log in /Users/m/Library/Logs/pip.log
根据http://pythonhosted.org/distribute/setuptools.html#using-setuptools-without-bundling-it,如果我有它应该只是“工作”:
from distribute_setup import use_setuptools
use_setuptools()
在 setup.py 中加载卡之后。然后我尝试按照以下方式将distribute_setup.py添加到MANIFEST.in:
% cat MANIFEST.in
include distribute_setup.py
添加该文件并在 setup.py 中修改版本号后,我尝试将新包上传到 PyPI:
% python setup.py sdist upload
running sdist
running egg_info
writing requirements to cvrfparse.egg-info/requires.txt
writing cvrfparse.egg-info/PKG-INFO
writing top-level names to cvrfparse.egg-info/top_level.txt
writing dependency_links to cvrfparse.egg-info/dependency_links.txt
writing entry points to cvrfparse.egg-info/entry_points.txt
reading manifest file 'cvrfparse.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
writing manifest file 'cvrfparse.egg-info/SOURCES.txt'
running check
creating cvrfparse-0.10
creating cvrfparse-0.10/cvrfparse
creating cvrfparse-0.10/cvrfparse.egg-info
creating cvrfparse-0.10/cvrfparse/sample-xml
creating cvrfparse-0.10/cvrfparse/schemata
creating cvrfparse-0.10/cvrfparse/schemata/common
creating cvrfparse-0.10/cvrfparse/schemata/common/1.1
creating cvrfparse-0.10/cvrfparse/schemata/cvrf
creating cvrfparse-0.10/cvrfparse/schemata/cvrf/1.1
creating cvrfparse-0.10/cvrfparse/schemata/dublincore
creating cvrfparse-0.10/cvrfparse/schemata/prod
creating cvrfparse-0.10/cvrfparse/schemata/prod/1.1
creating cvrfparse-0.10/cvrfparse/schemata/scap
creating cvrfparse-0.10/cvrfparse/schemata/vuln
creating cvrfparse-0.10/cvrfparse/schemata/vuln/1.1
creating cvrfparse-0.10/cvrfparse/schemata/w3.org
making hard links in cvrfparse-0.10...
hard linking MANIFEST.in -> cvrfparse-0.10
hard linking README -> cvrfparse-0.10
hard linking distribute_setup.py -> cvrfparse-0.10
hard linking setup.py -> cvrfparse-0.10
hard linking cvrfparse/__init__.py -> cvrfparse-0.10/cvrfparse
hard linking cvrfparse/cvrfparse.py -> cvrfparse-0.10/cvrfparse
hard linking cvrfparse.egg-info/PKG-INFO -> cvrfparse-0.10/cvrfparse.egg-info
hard linking cvrfparse.egg-info/SOURCES.txt -> cvrfparse-0.10/cvrfparse.egg-info
hard linking cvrfparse.egg-info/dependency_links.txt -> cvrfparse-0.10/cvrfparse.egg-info
hard linking cvrfparse.egg-info/entry_points.txt -> cvrfparse-0.10/cvrfparse.egg-info
hard linking cvrfparse.egg-info/requires.txt -> cvrfparse-0.10/cvrfparse.egg-info
hard linking cvrfparse.egg-info/top_level.txt -> cvrfparse-0.10/cvrfparse.egg-info
hard linking cvrfparse/sample-xml/CVRF-1.1-cisco-sa-20110525-rvs4000.xml -> cvrfparse-0.10/cvrfparse/sample-xml
hard linking cvrfparse/schemata/catalog.xml -> cvrfparse-0.10/cvrfparse/schemata
hard linking cvrfparse/schemata/common/1.1/common.xsd -> cvrfparse-0.10/cvrfparse/schemata/common/1.1
hard linking cvrfparse/schemata/cvrf/1.1/cvrf.xsd -> cvrfparse-0.10/cvrfparse/schemata/cvrf/1.1
hard linking cvrfparse/schemata/dublincore/dc.xsd -> cvrfparse-0.10/cvrfparse/schemata/dublincore
hard linking cvrfparse/schemata/prod/1.1/prod.xsd -> cvrfparse-0.10/cvrfparse/schemata/prod/1.1
hard linking cvrfparse/schemata/scap/cpe-language_2.2a.xsd -> cvrfparse-0.10/cvrfparse/schemata/scap
hard linking cvrfparse/schemata/scap/cvss-v2_0.9.xsd -> cvrfparse-0.10/cvrfparse/schemata/scap
hard linking cvrfparse/schemata/scap/scap-core_0.9.xsd -> cvrfparse-0.10/cvrfparse/schemata/scap
hard linking cvrfparse/schemata/vuln/1.1/vuln.xsd -> cvrfparse-0.10/cvrfparse/schemata/vuln/1.1
hard linking cvrfparse/schemata/w3.org/xml.xsd -> cvrfparse-0.10/cvrfparse/schemata/w3.org
Writing cvrfparse-0.10/setup.cfg
Creating tar archive
removing 'cvrfparse-0.10' (and everything under it)
running upload
Traceback (most recent call last):
File "setup.py", line 21, in <module>
['cvrfparse = cvrfparse.cvrfparse:main',]}
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.py", line 152, in setup
dist.run_commands()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/upload.py", line 60, in run
self.upload_file(command, pyversion, filename)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/command/upload.py", line 135, in upload_file
self.password)
TypeError: cannot concatenate 'str' and 'NoneType' objects
看起来好像是 None 之前的位置?
然后我尝试通过以下方式创建分发手动上传包:
% python setup.py sdist
然后通过 Web 界面将该文件上传到 PyPI。 pip install 仍然报告这个新的 .10 软件包存在同样的问题。我哪里错了?
【问题讨论】:
-
该行的用户名或密码为
None。检查您的主目录中的.pypirc文件。 -
用户名正确,密码省略。根据docs.python.org/2/distutils/packageindex#the-pypirc-file,如果省略密码字段,会提示用户输入。我尝试添加一个空密码“
password:”,然后从服务器“Upload failed (401): Unauthorized”收到 401 错误。问题仍未解决。 -
更多信息:我重新运行
$ python setup.py register并被重新提示输入我选择保存到 ~/.pypirc 的登录名/密码信息。接下来,我做了$ python setup.py sdist upload,它给出了另一个错误消息:Upload failed (400): Bad Request。 -
看起来这仍然是一个持续存在的问题。 .pypirc 中没有密码字段,它会以
TypeError: cannot concatenate 'str' and 'NoneType' objects失败。使用密码字段,但为空白,我得到Upload failed (401): Incorrect password。使用 .pypirc 中的密码,它可以工作。