web-dev-qa-db-ja.com

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

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

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

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

14
Roman

別の方法は、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-packages vs. site-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の間のディレクトリのマッピングが依然として必要です。

7
Andreas Maier

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-packages vs. site-packages上記の例では)。

誰かこれについての経験があれば、コメントしてください。

0
Andreas Maier