首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用apt-get将软件包安装到virtualenv

使用apt-get将软件包安装到virtualenv
EN

Ask Ubuntu用户
提问于 2015-02-04 16:04:29
回答 2查看 14.1K关注 0票数 18

根据这个答案apt-get在系统范围内安装软件包(来自规范),只有pip才能将软件包安装到虚拟环境中(来自Pypi)。

但是,我需要将一个软件包安装到一个仅可通过apt-get访问的虚拟包中,即它不是由Pypi托管的。

我该怎么做?

EN

回答 2

Ask Ubuntu用户

发布于 2015-10-27 12:17:12

另一种选择是使用apt-get download下载文件,用dpkg -x解压缩文件,并将提取的文件移动到您的虚拟环境中:

示例:

代码语言:javascript
复制
apt-get download python-xyz

假设这将导致:

代码语言:javascript
复制
./python-xyz_1.2.3-3ubuntu5_amd64.deb

然后,使用dpkg提取.deb文件的数据部分:

代码语言:javascript
复制
dpkg -x python-xyz_1.2.3-3ubuntu5_amd64.deb ./xyz-tmp

在新创建的./xyz-tmp目录中,如果您使用apt-get install,您现在已经拥有了安装到/ (root)中的所有文件。

假设它们是:

代码语言:javascript
复制
./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),然后可以将这些文件移动到您的虚拟目录中(假设是一个虚拟/home/user/.virtualenvs/py27):

代码语言:javascript
复制
mv ./xyz-tmp/usr/lib/python2.7/dist-packages/* /home/user/.virtualenvs/py27/lib/python2.7/site-packages/

与我之前的回答相比,这种方法的优点是不必研究安装了哪些文件,因为您可以在提取目录中看到它们。它仍然需要在提取的存档和虚拟目录之间映射目录。

票数 11
EN

Ask Ubuntu用户

发布于 2015-10-27 11:56:16

虚拟文件所需的全部内容就是在您的虚拟服务器的子树中存在包文件。因此,只要您能够确定哪些文件是通过apt-get安装到系统Python中的,就可以将这些文件复制到您的虚拟环境中。这包括站点包目录中的文件以及Python子树中其他位置的文件(例如脚本)。

假设的例子:

代码语言:javascript
复制
sudo apt-get python-xyz

假设它将一个名为"xyz“的包安装到您的系统Python2.7中,您可能会得到以下内容:

代码语言:javascript
复制
/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):

代码语言:javascript
复制
/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-packagessite-packages )。

如果有人有更多的经验,请评论。

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/581648

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档