2012-10-19 11 views
14

Czy mogę pobrać i zainstalować moduły Pythona z PyPi wyłącznie wewnątrz skryptu, bez korzystania z powłoki przy wszystkich?Jak mogę zainstalować moduły Pythona programowo/za pomocą skryptu Python?

Używam niestandardowego środowiska Python, interpretera Pythona Autodesk Maya. Nie przychodzi to z "easy_install" i nie ma "powłoki", a jedynie interpreter skryptów Pythona wywoływany przez główny plik wykonywalny Maya. Skopiowanie i wklejenie zawartości ez_setup.py do okna edytora skryptów i uruchomienie go poprawnie instaluje easy_install gdzieś w katalogu Maya, ale skrypt niepoprawnie zapisuje interpreter Pythona jako "... maya.exe" zamiast "... mayapy.exe "Ponadto użycie easy_install wymaga powłoki.

Celem jest dostarczenie skryptu w języku Python, który na przykład instaluje NumPy w systemie Maya Python. Można to osiągnąć, upuszczając jaja do katalogu lokacji-paczek, ale wymaga to ręcznej interwencji użytkownika. Wszystko, co użytkownik końcowy musi zrobić poza środowiskiem Maya, jest w zasadzie nietykalne, zwłaszcza jeśli chodzi o system plików. Ale bałagan z systemem plików przez skrypt? W porządku.

Czy istnieje coś bardziej eleganckiego niż ez_setup.py + edycja wynikowych łatwych instrukcji ... py's + wywołań podprocesowych? Czuję, że to podstawowa funkcja. Widzę dokumentację online do programowej instalacji modułu przez pip ... ale pip musi być zainstalowany najpierw!

Jaki jest najbardziej elegancki sposób instalacji modułu wyłącznie w ramach skryptu?

+0

Czy przypisywanie 'sys.executable' do ścieżki do' mayapy.exe' przed uruchomieniem 'ez_setup.py' działa? – icktoofay

+0

Dzięki: to naprawia 'ez_setup', ale wymaga wiedzy, gdzie' mayapy.exe' jest. Więcej hackowania ścieżek ... – DoctorPangloss

+1

Jeśli nie potrzebujesz rozdzielczości zależności easy_install, po prostu 'exec()' -ing plik 'setup.py' może działać – millimoose

Odpowiedz

15

Instalowanie easy_install dla programu Maya w systemie Windows.

  1. Pobierz ez_setup.py.
  2. otwarte okna cmd podwyższone (start, typ cmd, RMB kliknięcie na nim -> Uruchom jako administrator)
  3. zmienić katalog cmd do x: \ Maya zainstalować dir \ bin
    • przykład: cd c: Program Files \ \ MayaXX \ bin
  4. wykonać następujące polecenie mayapy x: \ WhereYouSaved \ ez_setup.py

Teraz łatwa instalacja powinna zostać poprawnie skonfigurowana.Możesz jeszcze zrobić następujące kroki:

  1. cd x: \ Maya zainstalować dir \ python \ Scripts
  2. nazwy wszystkich plików w tym folderze, aby rozpocząć z MA
    • przykład: dla% I w (*) zrobić ren% I MA% i
  3. dodać ten folder do ścieżki
    • hit Win + e
    • RMB właściwości Mój komputer i wybierz
    • Zaawansowane ustawienia systemu -> Zmienne środowiskowe
    • wyszukiwania zmienna edytować ścieżkę i dołączyć; x: \ Maya zainstalować dir \ python \ scripts

teraz możesz zadzwonić pod numer maeasy_install pythonModule z cmd w celu instalacji. Ponadto można zadzwonić po środku Maya zainstalować moduły:

from setuptools.command import easy_install 
easy_install.main(["pythonModule"]) 

UWAGA: Jeśli Maya jest zainstalowany w plikach programu wtedy naprawdę nie można zainstalować rzeczy bez podnoszenia. O ile nie zmienisz uprawnień do dysku do katalogu Pythona Maya.

+0

Dzięki. 'easy_install.main()' jest dokładnie tym, czego szukam, ponieważ wykonanie zmodyfikowanego 'ez_setup.py' wewnątrz Mayi również je instaluje. – DoctorPangloss

8
#!/usr/bin/env python 

from __future__ import print_function 

REQUIREMENTS = [ 'distribute', 'version', 'Cython', 'sortedcollection' ] 
try: 
    from setuptools import find_packages 
    from distutils.core import setup 
    from Cython.Distutils import build_ext as cython_build 
    import sortedcollection 
except: 
    import os, pip 
    pip_args = [ '-vvv' ] 
    proxy = os.environ['http_proxy'] 
    if proxy: 
     pip_args.append('--proxy') 
     pip_args.append(proxy) 
    pip_args.append('install') 
    for req in REQUIREMENTS: 
     pip_args.append(req) 
    print('Installing requirements: ' + str(REQUIREMENTS)) 
    pip.main(initial_args = pip_args) 

    # do it again 
    from setuptools import find_packages 
    from distutils.core import setup 
    from Cython.Distutils import build_ext as cython_build 
    import sortedcollection 
+0

To wygląda naprawdę interesująco. Czy to spróbuj zaimportować 'sortedcollection', a jeśli nie uda się zaimportować, zainstaluj pakiet? – DoctorPangloss

+0

@DoctorPangloss: Tak, zgadza się. Próbuje zaimportować Cython i sortowane zbiory wewnątrz bloku try/catch. Kiedy się nie powiedzie, używa PIP do instalacji zależności wymienionych w "WYMAGANIACH". Następnie próbuje ponownie zaimportować cython i sortowane zbiory, które powinny działać tym razem. –

Powiązane problemy