2009-06-01 21 views
16

extensión easy_install pitón permite instalar Huevos del pitón de la consola como:¿Usando easy_install dentro de un script python?

easy_install py2app 

Pero es posible acceder a la funcionalidad easy_install dentro de un script en Python? Quiero decir, sin llamar a os.system ("easy_install py2app"), sino a importar easy_install como un módulo de python y usar sus métodos nativos.

Respuesta

18

Cuando miro la fuente de herramientas de configuración, parece que puede intentar lo siguiente.

from setuptools.command import easy_install 
easy_install.main(["-U","py2app"]) 
+0

Se encuentra en la búsqueda de google: easy_install.main ("-U py2app" .split()). Por favor, cambie su texto de respuesta para que pueda aceptarlo :) – grigoryvp

+2

Puedo confirmar que esto funciona, lo hago todo el tiempo para crear scripts de instalación personalizados para mi proyecto python. +1 –

-2

Creo que puede hacerlo utilizando importando herramientas de configuración.

+0

y qué métodos para llamar o dónde buscar la documentación? :) – grigoryvp

2

¿Qué estás tratando de hacer específicamente? A menos que tenga unos requisitos extraños, te recomiendo declarar el paquete como una dependencia en su setup.py:

from setuptools import setup, find_packages 
setup(
    name = "HelloWorld", 
    version = "0.1", 
    packages = find_packages(), 
    scripts = ['say_hello.py'], 

    # Project uses reStructuredText, so ensure that the docutils get 
    # installed or upgraded on the target machine 
    install_requires = ['docutils>=0.3'], 

    package_data = { 
     # If any package contains *.txt or *.rst files, include them: 
     '': ['*.txt', '*.rst'], 
     # And include any *.msg files found in the 'hello' package, too: 
     'hello': ['*.msg'], 
    } 

    # metadata for upload to PyPI 
    author = "Me", 
    author_email = "[email protected]", 
    description = "This is an Example Package", 
    license = "PSF", 
    keywords = "hello world example examples", 
    url = "http://example.com/HelloWorld/", # project home page, if any 

    # could also include long_description, download_url, classifiers, etc. 
) 

La línea clave aquí es install_requires = ['docutils>=0.3']. Esto hará que el archivo setup.py instale automáticamente esta dependencia a menos que el usuario especifique lo contrario. Puede encontrar más documentación en este here (tenga en cuenta que el sitio web de setuptools es extremadamente lento).

Si tiene algún tipo de requisito que no se puede cumplir de esta manera, probablemente debería mirar S.Lott's answer (aunque nunca lo he intentado).

4
from setuptools.command import easy_install 

def install_with_easyinstall(package): 
    easy_install.main(["-U", package]). 

install_with_easyinstall('py2app') 
+0

+1 - ¡esto funciona! :-) –

0

La respuesta sobre invocar setuptools.main() es correcta. Sin embargo, si setuptools crea un .egg, el script no podrá importar el módulo después de instalarlo. Los huevos se agregan automáticamente a sys.path en la hora de inicio de Python.

Una solución es utilizar require() para añadir el nuevo huevo para el camino:

from setuptools.command import easy_install 
import pkg_resources 
easy_install.main(['mymodule']) 
pkg_resources.require('mymodule') 
Cuestiones relacionadas