¿Cómo subo una rueda de Python universal para Python 2 y 3?

Tengo un paquete en PyPi y cuando preparo una nueva versión, construyo la distribución de origen, construyo la rueda y subo, todo con setuptools.

Sin embargo, he encontrado que solo carga la rueda para la versión de Python utilizada en el comando de carga ( python y python3 ).

Aquí están los pasos que estoy tomando:

 python3 setup.py sdist python3 setup.py bdist_wheel --universal python3 setup.py sdist bdist_wheel upload 

De acuerdo con la Guía del usuario de Python Packaging :

Las “ruedas universales” son ruedas que son python puro (es decir, no contienen extensiones comstackdas) y son compatibles con Python 2 y 3

Así que eso parece ser lo correcto para mí.

Después del paso de comstackción de la rueda, verifico que la rueda esté construida y tenga el formato de nombre de archivo PACKAGE-VERSION-py2.py3-none-any.whl en dist pero cuando ejecuto la carga con python3 setup.py sdist bdist_wheel upload , crea una PACKAGE-VERSION-py3-none-any.whl y carga eso.

Si ejecuto python setup.py sdist bdist_wheel upload hace lo mismo para y carga un Python 2 solo uno.

El comando python3 setup.py sdist bdist_wheel upload crea una nueva distribución de rueda.

Necesitarás incluir las mismas banderas nuevamente en esa línea de comando:

 python3 setup.py sdist bdist_wheel --universal upload 

Es mejor usar twine para administrar las subidas; usará una conexión encriptada ( setuptools usa una conexión no encriptada y, por lo tanto, envía su nombre de usuario y contraseña sin cifrar) y le permite inspeccionar y probar la distribución antes de cargar:

 python3 setup.py sdist python3 setup.py bdist_wheel --universal # test the distributions twine upload dist/* 

Twine es actualmente también la única herramienta que configura los metadatos de las ‘versiones Py’ para PyPI correctamente para ruedas universales .