2012-05-05 22 views
12

Quiero crear un archivo setup.py que instale mis archivos en directorios personalizados. Tengo un determinado prefijo, donde me gustaría obtener el siguiente resultado:configuración de python setup.py para instalar archivos en directorios personalizados

/my/prefix/ 
    bin/ 
    script.sh 
    libexec/ 
    one.py 
    two.py 
    ... 
    lib/pythonX.Y/site-packages/ 
    package/... 

Mi proyecto inicial es el siguiente:

/ 
    script.sh 
    one.py 
    two.py 
    ... 
    setup.py 
    package/... 
    __init__.py 
    ... 

¿Cuál sería la mejor manera de lograr esto? Me gustaría ser capaz de instalarlo posteriormente con algo como:

python setup.py install --prefix=/my/prefix 

puedo conseguir "paquete" muy bien instalado en el directorio correcto como lib/pythonX.Y/site-packages bajo --prefix es el predeterminado ubicación. ¿Pero hay una manera clara de convertir script.sh en "bin" y otros archivos de python en "libexec"? La única forma de lograr eso sería copiar manualmente esos archivos en mi script setup.py. ¿Puede haber una manera más limpia y más estándar de hacer eso?

(editar)

Solución

que terminó con setup.py así:

setup(name='mylib', 
    scripts=['script.sh'], 
    data_files=[('libexec', ['one.py', 'two.py'])] 
) 

Por supuesto, se puede iterar sobre todos los archivos de Python para libexec, pero solo tengo 2-3 archivos Python que necesito allí.

(Edit2)

Además, puedo haber setup.cfg con lo siguiente:

[install] 
prefix=/my/prefix 

y en lugar de python setup.py install --prefix=/my/prefix yo sólo puedo hacer:

python setup.py install 
+0

Hay algunos documentos útiles aquí: https://docs.python.org/2/install/index.html#alternate-installation-unix-the-prefix-scheme y aquí https: //docs.python. org/3/distutils/introduction.html – Pierz

Respuesta

8

Los guiones se manejan mediante el uso del parámetro scripts para la función de configuración. Para libexec puede tratarlos como archivos de datos y usar opciones de datos.

setup(... 
    scripts=glob("bin/*"), 
    data_files=[(os.path.join(sys.prefix, 'libexec', 'mypackage'), glob("libexec/*"))], 
    ... 
) 

No estoy seguro de cómo funcionaría con una opción --prefix, nunca he probado eso.

+0

¡Gracias! data_files lo hizo por mí. Otra pregunta, ¿puedo tener un "prefijo" predeterminado? Si el usuario no especifica uno, me gustaría usar el mío (en lugar del predeterminado de python). – Ago

+1

Puede realizar opciones predeterminadas en el archivo setup.cfg. Está en el archivo de opciones de estilo .ini con secciones y pares de nombre-valor. Las opciones de línea de comando se traducen directamente a opciones allí (eliminar '--', etc.). – Keith

+0

funciona como un encanto, gracias! – Ago

Cuestiones relacionadas