2012-10-19 13 views
14

Kann ich Python-Module von PyPi ausschließlich innerhalb eines Skripts herunterladen und installieren, ohne eine Shell zu verwenden? überhaupt?Wie kann ich Python-Module programmgesteuert/über ein Python-Skript installieren?

Ich verwende eine nicht standardmäßige Python-Umgebung, den Python-Interpreter von Autodesk Maya. Dies kommt nicht mit "easy_install" und es gibt keine "Shell", nur einen Python-Skript-Interpreter, der von der ausführbaren Maya-Hauptdatei aufgerufen wird. Das Kopieren und Einfügen des Inhalts von ez_setup.py in das Skript-Editor-Fenster und das korrekte Ausführen von ez_setup.py installiert eine easy_install-Datei irgendwo im Maya-Verzeichnis, aber das Skript registriert den Python-Interpreter fälschlicherweise als "... maya.exe" anstelle von "... mayapy.exe "Außerdem benötigt die Verwendung von easy_install eine Shell.

Ziel ist die Bereitstellung eines Python-Skripts, das z. B. NumPy in das Maya Python-System installiert. Dies kann erreicht werden, indem Eier in das Site-Packages-Verzeichnis fallen gelassen werden, dies erfordert jedoch einen manuellen Benutzereingriff. Alles, was ein Endbenutzer außerhalb der Maya-Umgebung tun muss, ist im Wesentlichen unantastbar, vor allem das Durcheinander mit dem Dateisystem. Aber mit dem Dateisystem durch ein Skript versauen? Das ist gut.

Gibt es etwas eleganteres als ez_setup.py + Bearbeiten der resultierenden easy_install ... py's + Subprozessaufrufe? Ich habe das Gefühl, dass dies ein grundlegendes Merkmal ist. Ich sehe Dokumentation online für die programmatische Modulinstallation über Pip ... aber pip muss zuerst installiert werden!

Was ist der eleganteste Weg, ein Modul streng innerhalb der Grenzen eines Skripts zu installieren?

+0

Wird 'sys.executable' dem Pfad zu' mayapy.exe' vor der Ausführung von 'ez_setup.py' zugewiesen? – icktoofay

+0

Danke: Das behebt 'ez_setup', aber es erfordert zu wissen, wo' mayapy.exe' ist. Mehr Pfad Hacking ... – DoctorPangloss

+1

Wenn Sie nicht easy_Installs Abhängigkeit Auflösung benötigen, einfach 'exec()' -ing die 'setup.py' Datei könnte funktionieren – millimoose

Antwort

15

Installation von easy_install für Maya unter Windows.

  1. Download ez_setup.py.
  2. geöffnete Fenster cmd erhöht (Start, Typ cmd, rmb Klick darauf -> Als Administrator ausführen)
  3. Änderung des cmd-Verzeichnis x: \ maya Verzeichnis \ sind
    • Beispiel installieren: cd c: \ Programme \ MayaXX \ bin
  4. ausführen folgenden Befehl mayapy x: \ WhereYouSaved \ ez_setup.py

Jetzt sollte die einfache Installation ordnungsgemäß eingerichtet werden.Vielleicht möchten Sie noch tun folgende Schritte:

  1. cd x: \ maya dir \ Python \ scripts
  2. Umbenennungs alle Dateien in diesem Ordner mit ma
      starten installieren
    • Beispiel:% in i (*) tun% ern i% ma i
  3. fügen Sie diesen Ordner auf Ihrem Weg
    • hit win + e
    • rmb meinem Computer und wählen Sie Eigenschaften
    • Erweiterte Systemeinstellungen -> Umgebungsvariablen
    • Suchvariable Pfad bearbeiten und anhängen; x: Jetzt \ maya dir \ Python \ Scripts installieren

Sie können maeasy_install pythonModule von cmd für die Installation von Zeug aufrufen. Sie können auch folgende innerhalb Maya Rufmodule zu installieren:

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

HINWEIS: Wenn Maya in Programmdateien installiert ist, dann können Sie nicht wirklich Sachen installieren, ohne erhebend. Es sei denn, Sie ändern die Festplattenberechtigungen in das Maya-Python-Verzeichnis.

+0

Danke. 'easy_install.main()' ist genau das, wonach ich suche, denn das Ausführen eines modifizierten 'ez_setup.py' in Maya wird ebenfalls installiert. – 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

Das sieht wirklich interessant aus. Versucht dies, 'sortedcollection' zu importieren, und wenn das Importieren fehlschlägt, installieren Sie das Paket? – DoctorPangloss

+0

@DoctorPangloss: Ja, richtig. Es versucht, Cython und sortedcollection in den try/catch-Block zu importieren. Wenn es fehlschlägt, verwendet es pip, um Abhängigkeiten zu installieren, die in "REQUIREMENTS" aufgeführt sind. Dann versucht es wieder cython und sortedcollections zu importieren, was diesmal funktionieren sollte. –