2011-01-29 15 views
37

No puedo entender cómo hacer que setup.py agregue un script al usuario /bin o /usr/bin o lo que sea.setup.py y agregando archivo a/bin/

Por ej., Me gustaría agregar un myscript.py a /usr/bin para que el usuario pueda llamar al myscript.py desde cualquier directorio.

+0

Pruebe [este ejemplo] (https://chriswarrick.com/blog/2014/09/15/python-apps-the-right-way-entry_points-and-scripts/). Por defecto, 'python setup.py install' instalará my_project en'/usr/local/bin'. Para eliminar la instalación, ejecute 'python setup.py install --record files.txt', que genera archivos.txt, y luego eliminar esas rutas por 'rm' – anonymous

Respuesta

16

La documentación de Python lo explica en la sección installing scripts.

Los scripts son archivos que contienen el código fuente de Python, destinado a iniciarse desde la línea de comandos.

+0

Eso parece poner archivos en el directorio' bin' de Python (en mi Mac '/ opt/local/Library/Frameworks/Python.framework/Versions/3.1/bin /') pero todavía no puedo ejecutarlos. –

+2

aharon, dependiendo de cómo instaló 3.1, puede que tenga que modificar su 'PATH' para que las secuencias de comandos dentro de su directorio bin funcionen correctamente. Ver [esta respuesta] (http://stackoverflow.com/questions/3487664/getting-python-under-control-on-os-x-setting-up-environment-and-libraries/3489922#3489922) a una pregunta anterior para obtener instrucciones sobre cómo hacerlo. – Andrew

10

Si usted está dispuesto a construir e instalar todo el paquete python, así es como me gustaría ir al respecto:

  • Editar la configuración() en setup.py para contener un parámetro denominado guiones y establezca su argumento como la ubicación del archivo (s) que desea ejecutar desde cualquier lugar. p.ej.

setup(name='myproject',author='',author_email='',scripts=['bin/myscript.py'])

  • Dentro del directorio que contiene setup.py, cree un directorio bin escribiendo mkdir bin
  • Añadir myscript.py a este directorio recién creado bin (y asegúrese de que es ejecutable!)
  • cd en el directorio que contiene setup.py nuevamente, e instale todo el paquete python escribiendo python setup.py install
  • Una vez que el paquete está instalado, ¡debería poder ejecutar myscript.py desde cualquier lugar del sistema!
+0

¿Qué sucede si quiero omitir la extensión py? Por cierto, la práctica de agregar código fuente en el directorio bin es algo cuestionable – DataGreed

+0

@DataGreed Si quiere omitir la extensión .py ... omítala :) siempre y cuando el archivo sea ejecutable, la extensión puede omitirse y puede simplemente ejecuta 'myscript' desde la línea de comando. Perdona mi ingenuidad, pero ¿por qué es cuestionable agregar código fuente en el directorio bin? – wh1tney

+0

Es una decisión muy, muy extraña. Bin debería contener compilaciones, no fuentes. – DataGreed

40

Considere el uso de console_scripts:

from setuptools import setup 
setup(name='some-name', 
     ... 
     entry_points = { 
       'console_scripts': [ 
        'command-name = package.module:main_func_name',     
       ],    
      }, 
) 

Dónde main_func_name es una función principal en el módulo principal. nombre-comando es un nombre con el que se guardará en// local/bin usr/(por lo general)

+0

Si está ejecutando 'pip3 install --editable .' se instalará en el comando'/home/{username} /. Local/bin'. Si ejecuta 'sudo pip3 install --editable .' instalará el comando en'/usr/local/bin/' – sonance207

9

Hay dos maneras con el fin de conseguir una herramienta de línea de comandos de trabajo de setuptools e infraestructura PyPI:

  1. The "scripts" Keyword Argument
    Esto permite la ejecución de la línea de comandos de todo lo que desee, puede ser un script de Python, un script de shell o algo completamente diferente.
  2. The "console_scripts" Entry Point
    Esto permite que las funciones de Python (¡no las secuencias de comandos!) Se registren directamente como herramientas accesibles desde la línea de comandos.
+0

. Desgraciadamente, el primer método colocará scripts que probablemente tengan una extensión" .py "en el directorio bin Y (Creo) no se ajusten para virtualenvs. FEO. Lo mejor es usar console_scripts. –

Cuestiones relacionadas