Nach der Installation möchte ich Soft-Links zu einigen der Konfiguration machen & amp; Datendateien, die bei der Installation erstellt wurden.
Wie kann ich den Speicherort eines neuen Pakets in der Datei setup.py des Pakets ermitteln?
Ich habe anfangs den Pfad "/usr/local/lib/python2.7/dist-packages" hart-codiert, aber das ist kaputt, als ich versuchte, eine virtuelle Umgebung zu benutzen. (Erstellt von virtualenv.)
Ich habe versucht, distutils.sysconfig.get_python_lib (), und das funktioniert innerhalb der virtualenv. Wenn es jedoch auf dem realen System installiert wird, gibt es "/usr/lib/python2.7/dist-packages" zurück (Beachten Sie, dass das "lokale" Verzeichnis nicht vorhanden ist.)
Ich habe auch versucht site.getsitepackages ():
Ausführen einer Python-Shell aus der Basisumgebung:
Website importieren
site.getusersitepackages ()
'/ home / sarah / .local / lib / python2.7 / site-packages'
site.getsitepackages ()
['/ usr / local / lib / python2.7 / dist-Pakete', '/usr/lib/python2.7/dist-packages']
Ausführen einer Python-Shell aus einer virtuellen Umgebung "testenv":
Website importieren
site.getsitepackages ()
Traceback (letzter Aufruf zuletzt):
Datei "", Zeile 1, in
AttributeError: 'Modul' Objekt hat kein Attribut 'getsitepackages'
Ich starte "Python 2.7.3 (Standard, 1. August 2012, 05:14:39)" mit "[GCC 4.6.3] auf linux2" unter Ubuntu. Ich kann wahrscheinlich etwas mit try-except-Blöcken zusammensetzen, aber es scheint, als ob es eine Variable set / return von distutils / setuptools geben sollte. (Ich weiß nicht, welcher Zweig verwendet werden soll, solange es funktioniert.)
Danke.
Dies wird Ihre Frage wahrscheinlich nicht beantworten, aber wenn Sie auf den Quellcode eines installierten Pakets oder einer anderen Datei innerhalb dieses Pakets zugreifen müssen, ist es am besten, dieses Paket im Entwicklungsmodus zu installieren ( indem du die Sourcen herunterlädst, wo du willst und dann starte python setup.py im Basisverzeichnis der Paketquellen). Auf diese Weise wissen Sie, wo das Paket gefunden wurde.
Ich habe den "richtigen" Weg nicht gefunden, aber ich habe ein paar Tricks gefunden, die fast korrekt erscheinen. Eine Methode funktioniert nur bei der Installation. das andere funktioniert nur, wenn das Paket bereits installiert ist.
Zur Installation verwende ich das Objekt, das von setuptools.setup()
:
(Dies funktioniert nur während der Installation, da Sie ein gültiges Distribution
-Objekt für diese Attribute benötigen. AFAIK, die einzige Möglichkeit, ein solches Objekt zu erhalten, ist setup()
auszuführen.)
Bei der Deinstallation verwende ich das Attribut file des Pakets, wie oben von @Zhenya vorgeschlagen. Der einzige Haken ist, dass wenn ich ./setup.py uninstall
verwende, um package
loszuwerden, ich normalerweise die Verzeichnisse ./package/
, ./build
, ./dist
und ./package.egg-info/
habe. (Die Option "uninstall" wird von meinem Code abgefangen, ohne setup () aufzurufen. Sie führt ein manuell erstelltes Skript zum Löschen der Paketdateien aus.) Dies kann den Python-Interpreter an eine andere Stelle als das global zugängliche Repository umleiten versuchen, loszuwerden. Hier ist mein Hack, um das zu handhaben:
(Dies funktioniert nicht während der Installation, da - denke ich - Python nur Module beim Start inventarisiert, also findet find_module () das gerade installierte Paket nicht, außer Sie beenden Python und kommen wieder rein.)
Ich habe sowohl die Installation als auch die Deinstallation auf einer nackten Umgebung und einer virtuellen Umgebung getestet (ab virtualenv 1.9.1). Ich benutze Ubuntu 12.04 LTS, Python 2.7.3, setuptools 0.6c11 (in der blanken Umgebung) und setuptools 0.7.4 (in virtualenv).
Tags und Links python path installation setup.py