【问题标题】:How to import a globally installed package to virtualenv folder如何将全局安装的包导入 virtualenv 文件夹
【发布时间】:2012-12-09 03:44:59
【问题描述】:

所以我的 python 项目有一个名为 venv 的 virtualenv 文件夹。

我可以跑:

venv/bin/pip install -r requirements.txt

它安装了我需要的项目的所有要求,除了一个,M2Crypto。安装它的唯一方法是通过 apt-get:

apt-get install python-m2crypto

然后如何将通过 apt 安装的这个包添加到 venv 文件夹?

【问题讨论】:

    标签: python ubuntu virtualenv


    【解决方案1】:

    真正简单的解决方案。

    在虚拟环境目录下,编辑文件pyvenv.cfg。设置参数include-system-site-packages = true,并保存文件。 全局安装的模块将在您下次激活 (source venv/bin/activate) 环境时出现。

    可以通过pip list验证。

    享受吧!

    【讨论】:

    • 这是我能找到的唯一不需要 sudo 访问的解决方案。我的问题是我需要在一个 virtualenv 中导入一个预安装的全局包(它需要 sudo),我想在其中以可编辑模式安装其他包。在使用 --system-site-packages 创建 virtualenv 时这是不可能的。所以这对我帮助很大,谢谢!
    • 适合我的场景的解决方案,这是一个非常标准的解决方案。
    【解决方案2】:

    toggleglobalsitepackages 将切换访问系统范围的site-packages。

    注意:需要pip install virtualenvwrapper才能获取此命令;香草virtualenv 不包括它。使用virtualenvwrapper,您还可以获得非常有用的mkvirtualenv 和rmvirtualenv 命令等。

    【讨论】:

    • 仅当您安装 virtualenvwrapper 时。否则你会得到toggleglobalsitepackages: command not found
    • 今天是toggleglobalsitepackages
    • virtualenvwrapper 已安装,但我仍然收到 toggleglobalsitepackages: command not found。那些 virtualenv 的人真的需要更好地设计这个。恕我直言,这似乎是一个基本的必要功能。
    【解决方案3】:

    我到底做了什么:

    cp -R /usr/lib/python2.7/dist-packages/M2Crypto /home/richard/hello-project/venv/lib/python2.7/site-packages/
    cp -R /usr/lib/python2.7/dist-packages/OpenSSL /home/richard/hello-project/venv/lib/python2.7/site-packages/
    

    【讨论】:

    • 这应该内置在虚拟环境中
    • 是的,我想知道是否有一种 virualenv 方法可以在环境已经创建之后将系统范围的软件包安装到主机上。
    【解决方案4】:
    --system-site-packages
    

    为虚拟环境提供对全局站点包模块的访问权限。

    你可以这样做:

    $ sudo apt-get install python-m2crypto
    $ virtualenv env --system-site-packages
    

    ...然后您将可以访问您的 virtualenv 中的m2crypto(以及所有其他系统范围内安装的软件包)。

    【讨论】:

    • 只要你小心,只将你想要全局共享的包安装到基础 python 安装中,这就是要走的路。
    • 但是,如果虚拟环境可以访问全局站点包,那么使用虚拟环境有什么意义呢?
    • Richard Knop,这样你就可以在你自己的 virtualenv 中安装额外的包,而无需 root 用户,并且不会弄乱系统 python。
    • 如果您的虚拟环境已经设置并且您不想重新创建它并且您正在使用或愿意使用 virtualenvwrapper 来管理您的虚拟环境,您可以通过运行toggleglobalsitepackages command 事后添加对--system-site-packages 的访问权限。
    • @RichardKnop 有什么意义?这是一个例子。我有多个项目不同的库,但我对所有项目都使用 auto_py_to_exe
    【解决方案5】:
    venv/bin/pip install -I M2Crypto
    

    -I 强制它也安装到 virtualenv 中,即使它已经全局安装。

    【讨论】:

    • 我会试试的。为什么它没有记录在 pip --help 的输出中。
    • 它记录在pip help install 中。 -I 标志特定于 install 命令,因此未显示在全局标志列表中(还有许多其他特定于命令的标志)。
    • 谢谢。这不是很好。你看,M2Crypto 实际上可以通过 pip 安装,但是库中有一个错误,导致在 Ubuntu 12.04 LTS 上安装失败。他们发布了一个补丁,但它对我不起作用......所以当我尝试你的命令时,它会尝试从 pip 存储库下载库并安装它,而不是仅仅复制 apt 包。
    • 在这种情况下,您可能希望在此实例中使用--system-site-packages。
    猜你喜欢
    • 2014-01-23
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-13
    • 1970-01-01
    • 2014-01-24
    • 2017-12-05
    相关资源
    最近更新 更多