この回答 によれば、apt-get
はシステム全体に(標準から)パッケージをインストールし、pip
のみがパッケージをvirtualenv(Pypiから)にインストールできます。
ただし、apt-get
を介してのみアクセス可能なvirtualenvにパッケージをインストールする必要があります。つまり、Pypiによってホストされていません。
それ、どうやったら出来るの?
別の方法は、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の間のディレクトリのマッピングが依然として必要です。
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
上記の例では)。
誰かこれについての経験があれば、コメントしてください。