2009-06-01 6 views
16

przedłużenie easy_install Pythona pozwala zainstalować jaj Pythona z konsoli jak:Korzystanie z easy_install wewnątrz skryptu Pythona?

easy_install py2app 

Ale czy to możliwe, aby uzyskać dostęp do easy_install funkcjonalność wewnątrz skryptu Pythona? Mam na myśli, bez wywoływania os.system ("easy_install py2app"), ale zamiast importować easy_install jako moduł Pythona i używając jego natywnych metod?

Odpowiedz

18

Kiedy patrzę na źródło narzędzi instalacyjnych, wygląda na to, że możesz wypróbować następujące rzeczy.

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

Znaleziono w wyszukiwarce Google: easy_install.main ("-U py2app" .split()). Proszę zmienić tekst odpowiedzi, aby go zaakceptować :) – grigoryvp

+2

Mogę potwierdzić, że to działa - robię to cały czas, aby budować skrypty instalacji niestandardowej dla mojego projektu Pythona. +1 –

-2

Myślę, że można się do tego dostać za pomocą importowania setuptools.

+0

A jakie metody zadzwonić lub gdzie szukać dokumentacji? :) – grigoryvp

2

Co konkretnie próbujesz zrobić? Chyba że masz jakieś dziwne wymagania, polecam deklarując pakiet jako zależność w swoim 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. 
) 

Kluczem tutaj jest linia install_requires = ['docutils>=0.3']. Spowoduje to, że plik setup.py automatycznie zainstaluje tę zależność, chyba że użytkownik określi inaczej. Możesz znaleźć więcej dokumentacji na ten temat here (zwróć uwagę, że strona setuptools działa bardzo wolno!).

Jeśli masz jakieś wymaganie, którego nie można spełnić w ten sposób, prawdopodobnie powinieneś spojrzeć na S.Lott's answer (chociaż nigdy tego nie próbowałem).

4
from setuptools.command import easy_install 

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

install_with_easyinstall('py2app') 
+0

+1 - to działa! :-) –

0

Odpowiedź na pytanie o wywołanie setuptools.main() jest poprawna. Jeśli jednak setuptools utworzy plik .egg, skrypt nie będzie mógł zaimportować modułu po zainstalowaniu go. Jajka są dodawane automatycznie do sys.path w czasie uruchamiania Pythona.

Jednym z rozwiązań jest użycie require(), aby dodać nowy jajko do ścieżki:

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