apt-getを使用してパッケージをvirtualenvにインストールします


16

この回答によれば、apt-getパッケージをシステム全体に(標準から)pipインストールし、パッケージをvirtualenv(Pypiから)にのみインストールできます。

ただし、を介してのみアクセス可能なvirtualenvにパッケージをインストールする必要がありますapt-get。つまり、Pypiによってホストされていません。

それ、どうやったら出来るの?


素敵な質問パル。
rɑːdʒɑ

回答:


8

別の方法は、でファイルをダウンロードしapt-get download、で抽出しdpkg -x、抽出したファイルをvirtualenvに移動することです:

例:

apt-get download python-xyz

この結果は次のようになります。

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

次に、dpkgを使用して、.debファイルのデータ部分を抽出します。

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

新しく作成された./xyz-tmpディレクトリに、/使用していた(ルート)にインストールされていたすべてのファイルがありますapt-get install

次のように仮定します。

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

あなたはまだ(たとえば、サブディレクトリをマップする必要がdist-packagessite-packages)、そして(virtualenvのを想定して、あなたのvirtualenvのにファイルを移動することができます/home/user/.virtualenvs/py27):

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

以前の回答と比較すると、この方法には、どのディレクトリにインストールされているかを調査する必要がないという利点があります。抽出ディレクトリでファイルを確認できるためです。抽出されたアーカイブとvirtualenvの間のディレクトリのマッピングが必要です。


+ 1、APTを介してのみアクセス可能なパッケージをvirtualenvにインストールするのに非常にうまく機能するこのアプローチの別の例を次に示します-最近Python 3.7を使用して同様のことを行いました。
RichVel

0

virtualenvに必要なのは、virtualenvのサブツリーにパッケージファイルが存在することだけです。したがって、どのファイルがapt-getを介してシステムPythonにインストールされたかを判別できる限り、それらをvirtualenvにコピーできます。これには、サイトパッケージディレクトリ内のファイルだけでなく、Pythonサブツリー内の他の場所(スクリプトなど)のファイルも含まれます。

仮説の例:

sudo apt-get python-xyz

「xyz」という名前のパッケージをシステムのPython 2.7にインストールすると仮定すると、次のようになります:

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

「xyz」パッケージに関連するファイルをvirtualenvにコピーします(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

難しさは、(1)特定のパッケージに属するファイルを特定すること、および(2)システムPythonとvirtualenvの間で対応するサブディレクトリをマッピングすることです(例dist-packagesvs.site-packages、上記の例では)。

誰かがこれについてもっと経験があるなら、コメントしてください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.