2009-06-01 12 views
16

extension python easy_install permet d'installer des œufs de python de la console comme:Utiliser easy_install dans un script python?

easy_install py2app 

Mais est-il possible d'accéder easy_install fonctionnalité dans un script python? Je veux dire, sans appeler os.system ("easy_install py2app") mais importer à la place easy_install en tant que module python et en utilisant ses méthodes natives?

Répondre

18

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

Trouvé sur google search: easy_install.main ("-U py2app" .split()). Veuillez changer votre texte de réponse pour que je puisse l'accepter :) – grigoryvp

+2

Je peux confirmer que cela fonctionne - Je le fais tout le temps pour construire des scripts d'installation personnalisée pour mon projet python. +1 –

-2

Je pense que vous pouvez y arriver en utilisant soit l'importation de setuptools. Lorsque je regarde la source des outils de configuration, il semble que vous pouvez essayer ce qui suit:

+0

Et quelles méthodes pour appeler ou où chercher de la documentation? :) – grigoryvp

2

Qu'est-ce que vous essayez de faire? Sauf si vous avez des exigences bizarres, je vous recommande de déclarer le paquet en tant que dépendance dans votre 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 ligne clé ici est install_requires = ['docutils>=0.3']. Cela entraînera l'installation automatique de cette dépendance par le fichier setup.py, sauf indication contraire de l'utilisateur. Vous pouvez trouver plus de documentation sur ce here (notez que le site Internet de setuptools est extrêmement lent!).

Si vous avez des exigences qui ne peuvent être satisfaites de cette façon, vous devriez probablement regarder S.Lott's answer (bien que je ne l'ai jamais essayé moi-même).

4
from setuptools.command import easy_install 

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

install_with_easyinstall('py2app') 
+0

+1 - cela fonctionne! :-) –

0

La réponse à l'appel de setuptools.main() est correcte. Cependant, si setuptools crée un .egg, le script ne pourra pas importer le module après l'avoir installé. Les oeufs sont ajoutés automatiquement à sys.path au démarrage de Python.

Une solution consiste à utiliser require() pour ajouter le nouvel oeuf sur le chemin:

from setuptools.command import easy_install 
import pkg_resources 
easy_install.main(['mymodule']) 
pkg_resources.require('mymodule') 
Questions connexes