para paquetes mac librerias instalar enseño descargar python

paquetes - instalar pip python windows



¿Ejecutar un paquete de Python instalado como un script? (3)

¿Hay alguna manera de permitir que un paquete se ejecute como un script? Por ejemplo:

[~]# easy_install /path/to/foo.egg ... [~]# python -m foo --name World Hello World

He intentado crear un archivo __main__.py dentro de mi paquete pero no se está ejecutando (estoy usando Python 2.6). Se plantea el siguiente error:

foo is a package and cannot be directly executed

La estructura de mi paquete es la siguiente:

foo/ setup.py foo/ __init__.py __main__.py

Ejecutar python -m foo.__main__ --name World funciona como se esperaba, pero preferiría la primera forma de ejecución. es posible?


Creo que esto puede ser una limitación de Python 2.6. Lo he probado y ejecutando un paquete (ya sea en . O instalado desde un egg con easy_install) con la opción -m funciona bien en 2.7, pero no en 2.6. Por ejemplo, en mi sistema (Ubuntu) con un paquete de prueba llamado pkg_exec en el directorio actual, y donde __main__.py simplemente imprime sys.argv :

xx@xx:~/tmp/pkg_exec$ python2.6 -m pkg_exec /usr/bin/python2.6: pkg_exec is a package and cannot be directly executed xx@xx:~/tmp/pkg_exec$ python2.7 -m pkg_exec [''/home/xx/tmp/pkg_exec/pkg_exec/__main__.py'']

Además, de acuerdo con los 2.7 documentos :

Cambiado en la versión 2.7: Proporcione el nombre del paquete para ejecutar un submódulo __main__ .


Esta es una regresión en Python 2.6. Vea el número issue2571 :

La intención de ejecutar paquetes nunca fue intencionada, ya que al hacerlo se interrumpen las importaciones de varias maneras sutiles. En realidad, era un error en 2.5 que estaba permitido, por lo que 2.6 no solo lo deshabilitó nuevamente, sino que también agregó una prueba para asegurarse de que permanezca deshabilitado (2.4 lo rechazó correctamente con ImportError, igual que 2.6).

Tienes algunas opciones, puedes ejecutarlo siempre especificando main:

$ python -m module.__main__

O puede escribir un contenedor de shell shell que detecte la versión de python y luego la ejecute en un estilo diferente.

O puede ejecutar el código en la línea de comando que importará y luego ejecutar el módulo, y luego colocarlo en un script de shell:

$ python -c "import module; module.main()"

En mis propios proyectos de línea de comandos tengo el script de shell que detecta errores (Python no se está instalando, etc.) pero el script de shell también ejecutará el código de importación y detectará si se han instalado los módulos necesarios y generará un error (con un enlace útil o instalar texto).


Mientras el paquete esté en la ruta de acceso de python, agregue al final de la secuencia de comandos.

if __name__ == "__main__": call_script()

$ python -m module_name

ejecutará el módulo por ejemplo

python -m random