Installieren Sie das Paket mit apt-get in virtualenv

16

Laut dieser Antwort werden apt-getPakete pipsystemweit (von Canonical) installiert , und es können nur Pakete in einer virtuellen Umgebung (von Pypi) installiert werden.

Ich muss jedoch ein Paket in eine virtuelle Umgebung installieren, auf die nur über zugegriffen werden kann apt-get, dh die nicht von Pypi gehostet wird.

Wie mache ich das?

römisch
quelle
Schöne Frage, Kumpel.
4.

Antworten:

8

Eine andere Alternative besteht darin, die Datei mit herunterzuladen, mit zu apt-get downloadextrahieren dpkg -xund die extrahierten Dateien in Ihre virtuelle Umgebung zu verschieben:

Beispiel:

apt-get download python-xyz

Nehmen wir an, dies führt zu:

./python-xyz_1.2.3-3ubuntu5_amd64.deb

Verwenden Sie dann dpkg, um den Datenteil der .deb-Datei zu extrahieren:

dpkg -x python-xyz_1.2.3-3ubuntu5_amd64.deb ./xyz-tmp

In dem neu erstellten ./xyz-tmpVerzeichnis haben Sie nun alle Dateien, die bei Verwendung von /(root) installiert worden wären apt-get install.

Angenommen, sie sind:

./xyz-tmp/usr/lib/python2.7/dist-packages/xyz/
./xyz-tmp/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info

Sie müssen die Unterverzeichnisse noch zuordnen ( z. B. dist-packagesvs. site-packages) und können dann die Dateien in Ihre virtuelle Umgebung verschieben (unter der Annahme einer virtuellen Umgebung /home/user/.virtualenvs/py27):

mv ./xyz-tmp/usr/lib/python2.7/dist-packages/* /home/user/.virtualenvs/py27/lib/python2.7/site-packages/

Gegenüber meiner vorherigen Antwort hat dieser Ansatz den Vorteil, dass Sie nicht nachforschen müssen, welche Dateien installiert wurden, da Sie sie im Extraktionsverzeichnis sehen können. Es ist weiterhin eine Zuordnung von Verzeichnissen zwischen dem extrahierten Archiv und dem virtuellen Verzeichnis erforderlich.

Andreas Maier
quelle
+1, hier ist ein weiteres Beispiel für diesen Ansatz, der sich gut eignet, um Pakete zu installieren, auf die nur über APT zugegriffen werden kann.
RichVel
0

Alles, was für eine virtuelle Umgebung benötigt wird, ist das Vorhandensein der Paketdateien im Teilbaum Ihrer virtuellen Umgebung. So lange Sie feststellen können, welche Dateien über apt-get auf dem System Python installiert wurden, können Sie diese in Ihr virtuelles Laufwerk kopieren. Dies umfasst Dateien im Site-Paketverzeichnis sowie an anderen Stellen in Ihrem Python-Unterbaum (z. B. Skripte).

Hypothetisches Beispiel:

sudo apt-get python-xyz

Angenommen, es installiert ein Paket namens "xyz" in Ihrem Python 2.7-System. Möglicherweise erhalten Sie Folgendes:

/usr/lib/python2.7/dist-packages/xyz/
/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info

Kopieren Sie die Dateien, die mit dem Paket "xyz" zusammenhängen, auf Ihr virtualenv (unter der Annahme eines virtualenv /home/user/.virtualenvs/py27):

/home/user/.virtualenvs/py27/lib/python2.7/site-packages/xzy/
/home/user/.virtualenvs/py27/lib/python2.7/site-packages/xzy-1.2.3.egg-info

Die Schwierigkeit besteht darin , (1) in der Bestimmung , welche Dateien gehört zu einem bestimmten Paket, und (2) in Zuordnung Unterverzeichnisse zwischen dem System und den virtualenv Python (zB entsprechend dist-packagesvs. site-packagesin dem obigen Beispiel).

Wenn jemand mehr Erfahrung damit hat, bitte kommentieren.

Andreas Maier
quelle