Encontré que setup.py
for httplib2
parece tener una forma elegante de admitir Python 2.xy 3.x. Entonces decidí copiar ese método.
La tarea consiste en crear un único setup.py
para la distribución de paquetes que funciona con todas las distribuciones admitidas de Python. Luego, con la misma setup.py
, que puede hacer:
python2 setup.py install
, así como
python3 setup.py install
Debería ser posible mantener setup.py
bastante simple que se consultará con todas las distribuciones de Python soportados. Lo he hecho con éxito con un paquete cobs
que admite 2.4 a 2.6 y 3.1. Ese paquete incluye código puro de Python (código separado para Python 2.xy 3.x) y extensiones C, escritas por separado para 2.x y 3.x.
hacerlo:
1) puse el código Python 2.x en un subdirectorio python2
, y el código Python 3.x en un subdirectorio python3
.
2) pongo el código de extensión C para 2.xy 3.x en un directorio src
bajo python2
y python3
.
Por lo tanto, la estructura de directorios es:
root
|
+--python2
| |
| +--src
|
+--python3
| |
| +--src
|
+--setup.py
+--MANIFEST.in
3) En el setup.py
, que tenían estas líneas cerca de la parte superior:
if sys.version_info[0] == 2:
base_dir = 'python2'
elif sys.version_info[0] == 3:
base_dir = 'python3'
4) en la llamada a setup
, he especificado el paquetes de forma normal:
setup(
...
packages=[ 'cobs', 'cobs.cobs', 'cobs.cobsr', ],
5) Especifiqué el directorio base para t código que Python usando una opción package_dir
(consulte el paso 3 para base_dir
):
package_dir={
'cobs' : base_dir + '/cobs',
},
6) para las extensiones C, I dio la ruta:
ext_modules=[
Extension('cobs.cobs._cobs_ext', [ base_dir + '/src/_cobs_ext.c', ]),
Extension('cobs.cobsr._cobsr_ext', [ base_dir + '/src/_cobsr_ext.c', ]),
],
eso fue todo para setup.py
. El archivo setup.py
es analizable por Python 2.xy 3.x.
7) Por último, si se construye una distribución de código fuente usando:
python2 setup.py sdist
continuación, lo hará por el tirón defecto en sólo los archivos que son específicamente necesarias para construir para que Python. P.ej. en el caso anterior, solo obtendría los archivos en python2
en la distribución de origen, pero no en los de python3
. Pero para una distribución de fuente completa, desea incluir los archivos para 2.x y 3.x. Para ello, cree un archivo que contiene MANIFEST.in
algo como esto:
include *.txt
recursive-include python2 *
recursive-include python3 *
a ver lo que hice, ver el código fuente de cobs
PyPI o BitBucket.
'easy_install' no funciona para Python 3.x – jfs
¿Qué' pip' entonces? –
La versión Distribuir de 'easy_install' funciona para Python 3.x (http://pypi.python.org/pypi/distribute). –