回答:
別の方法は、でファイルをダウンロードし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
対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
、上記の例では)。
誰かがこれについてもっと経験があるなら、コメントしてください。