2009-06-01 14 views
16

estensione easy_install python permette di installare le uova Python da console come:Utilizzo di easy_install all'interno di uno script Python?

easy_install py2app 

Ma è possibile accedere easy_install funzionalità all'interno di uno script python? Intendo, senza chiamare os.system ("easy_install py2app"), ma invece importando easy_install come modulo python e usando i suoi metodi nativi?

risposta

18

Quando guardo all'origine degli strumenti di installazione, sembra che si possa provare quanto segue.

+0

Trovato su ricerca google: easy_install.main ("-U py2app" .split()). Si prega di cambiare il testo della risposta in modo che io possa accettarlo :) – grigoryvp

+2

Posso confermare che questo funziona - lo faccio tutto il tempo per costruire script di installazione personalizzata per il mio progetto python. +1 –

-2

Penso che si possa arrivare a ciò usando l'importazione di setuptools.

+0

E quali sono i metodi per chiamare o dove cercare la documentazione? :) – grigoryvp

2

Che cosa stai cercando in particolare? A meno che non si dispone di alcuni requisiti strani, mi consiglia di dichiarare il pacchetto come una dipendenza nella vostra 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 linea di chiave qui è install_requires = ['docutils>=0.3']. Ciò farà sì che il file setup.py installi automaticamente questa dipendenza a meno che l'utente non specifichi diversamente. Puoi trovare più documentazione su questo here (nota che il sito web setuptools è estremamente lento!).

Se si dispone di un tipo di requisito che non può essere soddisfatto in questo modo, si dovrebbe probabilmente guardare a S.Lott's answer (anche se non l'ho mai provato).

4
from setuptools.command import easy_install 

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

install_with_easyinstall('py2app') 
+0

+1 - funziona! :-) –

0

La risposta sull'invocazione di setuptools.main() è corretta. Tuttavia, se setuptools crea un file .egg, lo script non sarà in grado di importare il modulo dopo averlo installato. Le uova vengono aggiunte automaticamente a sys.path all'avvio di python.

Una soluzione è quella di utilizzare require() per aggiungere il nuovo uovo al percorso:

from setuptools.command import easy_install 
import pkg_resources 
easy_install.main(['mymodule']) 
pkg_resources.require('mymodule') 
Problemi correlati