当我自己写了一个库 mml_qae 时,我尝试使用
python setup.py sdist
twine upload dist/*
将其上传至pypi.org开源.但twine.exe报错:
ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with OpenSSL 1.1.0j
20 Nov 2018. See: https://github.com/urllib3/urllib3/issues/2168
按照报错信息,找到了网页,但其上面的信息似乎对于解决问题的帮助并不大.可以通过
pip3 list
查找已安装包的版本,发现现在我所有的包(仅列举出与上传库有关的包)
dong 0.2.1.8
twine 4.0.2
requests 2.30.0
urllib3 1.25.11
但twine 4.0.2 要求 urllib3>=1.26.0 于是我
pip uninstall urllib3
pip install urllib3==1.26.0
哎?!又报错了?!这回它说:
dong 0.2.1.8 requires requests==2.22.0
这怎么事?哦,原来urllib3下载时附带的requests 是2.30.0,所以...
pip uninstall requests
pip install requests==2.22.0
擦,又报错
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behrequests 2.22.0 requires urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1, but you have urllib3 1.26.15 which is incompatible.
来来来咱看看这对urllib3包的版本要求哈,发现
twine 4.0.2 requires urllib3>=1.26.0
requests 2.22.0 requires urllib3!=1.25,!=1.25.1,<1.26,>=1.21.1
啊这.urllib3的包既需要大于等于1.26,又需要小于1.26?!
先理理脉络:
dong 0.2.1.8 -> requests == 2.22.0 -> urllib3 !=1.25 , !=1.25.1 , <1.26 , >=1.21.1
twine 4.0.2 -> urllib3 >= 1.26.0
啥意思?就urllib3包的版本冲突根本原因在dong包和twine包的冲突.怎么办?降版本呗!
查阅pypi官网发现dong包无论什么版本,都需要恰好2.22.0的requests.因此我们逐次降低twine版本:
pip uninstall twine
pip install twine==3.8.0
->报错(错误同上)
pip uninstall twine
pip install twine==2.0.0
此时再运行
twine upload dist/*
运行成功,开始输入Pypi账号和密码.上传成功!
我上传的库名是 mml_qae ,但在twine成功上传后却发现
pip install mml_qae
报错.这是因为pip默认了国内的清华镜像.它每10分钟(有时会达到30分钟或更长)才刷新一次;而pypi官网也并非上传后立刻更新.耐心等待一段时间后进入pypi网站发现该库已被pypi接受.再过一段时间即可通过pip下载啦!
setup.py模板:
import setuptools
setuptools.setup(
name='包的名称',
version='包的版本',
description='包的简介',
long_description='包的描述',
author='作者',
author_email='作者邮箱',
url='https://www.python.org',
packages=setuptools.find_packages(),
)
将中文部分替换成对应的内容即可.记得先运行
pip install setuptools
pyproject.toml源码:(来自原创)
[project]
name = "example_package_YOUR_USERNAME_HERE"
version = "0.0.1"
authors = [
{ name="Example Author", email="[email protected]" },
]
description = "A small example package"
readme = "README.md"
requires-python = ">=3.7"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
"Homepage" = "https://github.com/pypa/sampleproject"
"Bug Tracker" = "https://github.com/pypa/sampleproject/issues"