根据这个答案,apt-get在系统范围内安装软件包(来自规范),只有pip才能将软件包安装到虚拟环境中(来自Pypi)。
但是,我需要将一个软件包安装到一个仅可通过apt-get访问的虚拟包中,即它不是由Pypi托管的。
我该怎么做?
发布于 2015-10-27 12:17:12
另一种选择是使用apt-get download下载文件,用dpkg -x解压缩文件,并将提取的文件移动到您的虚拟环境中:
示例:
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,您现在已经拥有了安装到/ (root)中的所有文件。
假设它们是:
./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),然后可以将这些文件移动到您的虚拟目录中(假设是一个虚拟/home/user/.virtualenvs/py27):
mv ./xyz-tmp/usr/lib/python2.7/dist-packages/* /home/user/.virtualenvs/py27/lib/python2.7/site-packages/与我之前的回答相比,这种方法的优点是不必研究安装了哪些文件,因为您可以在提取目录中看到它们。它仍然需要在提取的存档和虚拟目录之间映射目录。
发布于 2015-10-27 11:56:16
虚拟文件所需的全部内容就是在您的虚拟服务器的子树中存在包文件。因此,只要您能够确定哪些文件是通过apt-get安装到系统Python中的,就可以将这些文件复制到您的虚拟环境中。这包括站点包目录中的文件以及Python子树中其他位置的文件(例如脚本)。
假设的例子:
sudo apt-get python-xyz假设它将一个名为"xyz“的包安装到您的系统Python2.7中,您可能会得到以下内容:
/usr/lib/python2.7/dist-packages/xyz/
/usr/lib/python2.7/dist-packages/xyz-1.2.3.egg-info将与"xyz“包相关的文件复制到您的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)在system和virtualenv之间映射相应的子目录(例如,上面示例中的dist-packages与site-packages )。
如果有人有更多的经验,请评论。
https://askubuntu.com/questions/581648
复制相似问题