Wie füge ich unter Debian ein Python-Paket in dist-Paketen zu einer virtuellen Umgebung hinzu?

7

Wie füge ich dieses Paket einer virtuellen Umgebung hinzu, wenn ein Python-Paket in /usr/share/pyshared/oder /usr/lib/pythonX.Y/dist-packages/( zum Beispiel python-numpyoder python-scipy) vorhanden ist?

Erfordert das Hinzufügen des Pakets zur virtuellen Umgebung, dass es die "normale" Python-Installationsmethode ( setpy.pyusw.) zur Installation verwendet oder eine eigene hat?

Im Grunde möchte ich in der Lage sein leicht Python - Pakete hinzufügen, die C - Erweiterungen haben , die komplex sind ( numpy, scipy, pyQt/pyside, pygtketc.), zu einem virtualenv.

James Tocknell
quelle
@sr_ Hier geht es um die --system-site-packagesOption, die alle Pakete in dist-packages / site-packages enthält. Ich möchte nur ein Paket einschließen.
James Tocknell

Antworten:

3

Wie Sie bereits angedeutet haben, ist es oft am besten, ein Rad herzustellen, insbesondere wenn Sie es regelmäßig neu installieren.

Für die gtk-Bindungen von Python funktionierte dies bei mir nicht und ich brauchte eine Möglichkeit, den Code mithilfe von tox(der die virtuellen Envs für Sie mit --no-site-packages erstellt) zu testen . Zu Testzwecken wäre es (für mich) gut genug, die entsprechenden vom System installierten Versionen zu verknüpfen, aber nicht alles von site-packages/ dist-packages.

Zu diesem ruamel.venvgtkZweck habe ich ein installierbares Paket ( ) erstellt, das die richtigen Links für Python2.7 und Python3.4 auf Debian-basierten Systemen (Ubuntu, Linux Mint) erstellt. Dies geschieht während der Einrichtung des Programms, sodass Sie Ihr Programm nicht ändern müssen. Der Abschnitt der tox.iniDatei depssieht folgendermaßen aus:

deps =
    pytest
    ruamel.venvgtk

und für jede erstellte virtuelle Umgebung pipwerden ruamel.venvgtkdie entsprechenden Links installiert und erstellt.

Anthon
quelle
Das ist ziemlich toll. Persönlich hoffe ich, dass pgi erfolgreich ist, aber ich hoffe nicht sehr, dass Pygir-c-Typen dies nicht getan haben.
James Tocknell
@aragilar für Python3 Ich verlinke in der giBibliothek. Ich hatte pgi noch nie gesehen. Ich benutze pygtk nur für ein paar Projekte, war aber irritiert, dass ich es nicht testen konnte tox, daher die Erstellung dieses Pakets
Anthon
1

Ja, wenn Ihr virtualenv aktiv ist, müssen Sie Ihr erforderliches Paket mit distutils, der "normalen" Python-Installationsmethode ( python setup.py install) oder mit einem virtualenv-fähigen Tool (z pip install package. B. ) installieren .

Die Version des von Ihnen installierten Pakets ist die aktive Paketversion für die virtuelle Umgebung. Es spielt keine Rolle, ob Sie die virtuelle Umgebung mit virtualenv MY_ENVoder erstellen virtualenv --no-site-packages MY_ENV. Im ersten Fall sind alle in Ihrem System Python installierten Pakete in der virtuellen Umgebung verfügbar, aber jedes Paket, das Sie in der virtuellen Umgebung installieren, maskiert die Version in Ihrem System Python, während die virtuelle Umgebung aktiv ist. Im zweiten Fall haben Sie eine isolierte Python-Umgebung in der virtuellen Umgebung, in der nur die Standardbibliothekspakete und alles, was Sie dort installieren, verfügbar sind.

Beachten Sie, dass Pakete wie Numpy und Scipy unter Linux keine vorgefertigten Binärdateien bereitstellen. Sie müssen sie daher bequem selbst erstellen können, wenn Sie die über Ihren Paketmanager verfügbaren Versionen nicht verwenden möchten.

scottza
quelle
Ich weiß, wie man Python-Pakete installiert, und habe schon einige Male Numpy, Scipy usw. erstellt. Ich würde viel lieber einfach die Systemversionen einiger Python-Bibliotheken verwenden. Die Frage ist, wie ich nur einige System-Python-Bibliotheken hinzufüge, nicht alle (was ich zuvor auch getan habe).
James Tocknell
"Normal" bedeutete auch die Verwendung von Distutils, Setuptools / Distribute, numpy.distutils, easy_install, Packaging, Bento usw. im Gegensatz zu Pfadmanipulation, Durcheinander mit importlib und ähnlichem.
James Tocknell
Wenn Sie $ virtualenv --no-site-packages MY_ENV cd MY_ENV source bin/activatedie Pakete nicht ausführen möchten . Die einzige Möglichkeit, die Sie sehen können, besteht darin, die virtuelle Umgebung mit zu erstellen --no-site-packagesund dann die entsprechenden Paketverzeichnisse von Ihren System-Site-Paketen in die Site-Pakete in der virtuellen
Umgebung zu
1

Ich denke, da diese Frage seit über einem Jahr (Stand März 2014) keine Aktivität mehr hatte, hat niemand eine Antwort, also werde ich schreiben, wie ich das Problem irgendwie gelöst habe.

Verwenden Sie für Pakete, deren Quellinstallationsmethode virtuelle Umgebungen (numpy / scipy, pyside) berücksichtigt, Räder, um zu vermeiden, dass sie in jedem Venv neu erstellt werden müssen.

Bei Paketen, die dies nicht tun (GTK), hängt es davon ab, wie sie sich in Python einbinden.

James Tocknell
quelle