Pypi上传自己库时报错的解决方案(巨详细)

背景介绍

当我自己写了一个库 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账号和密码.上传成功!

pip下载

我上传的库名是 mml_qae ,但在twine成功上传后却发现

pip install mml_qae

报错.这是因为pip默认了国内的清华镜像.它每10分钟(有时会达到30分钟或更长)才刷新一次;而pypi官网也并非上传后立刻更新.耐心等待一段时间后进入pypi网站发现该库已被pypi接受.再过一段时间即可通过pip下载啦!

setup.py/pyproject.toml模板 

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" 

 

 

你可能感兴趣的:(python,开发语言)