【问题标题】:How to force install package in virtualenv?如何在 virtualenv 中强制安装包?
【发布时间】:2019-04-04 07:21:49
【问题描述】:

尝试在系统中安装不同版本的 django,它向我显示:

Installing collected packages: Django
Found existing installation: Django 1.7.11
Not uninstalling django at /home/user/lib/python2.7, outside environment /home/user/webapps/v2_dev/venv

成功安装Django-1.8.19

但其实有旧版本

尝试了不同的命令:

./venv/bin/pip install Django==1.8.11

pip install Django==1.8.11

更新: 当我安装我的包时,它显示:

The required version of setuptools (>=16.0) is not available,
and can't be installed while this script is running. Please
install a more recent version first, using
'easy_install -U setuptools'.
(Currently using setuptools 3.1 (/home/user/lib/python2.7/setuptools-3.1-py2.7.egg))

当我进行升级时:

venv/bin/pip install --upgrade setuptools
Requirement already up-to-date: setuptools in ./venv/lib/python2.7/site-packages (40.5.0)

【问题讨论】:

  • 在 pip 命令末尾添加--upgrade
  • 不,不起作用。显示已安装但 'pip list' 表明不是
  • 卸载包并用pip重新安装,并确保删除lib/site-packages....中的所有相关文件夹
  • 为什么它使用来自系统的 setuptools,而不是来自 venv

标签: python django pip webfaction


【解决方案1】:

解决方法,但它有效!

在您的 virtualenv 目录中更改 pyvenv.cfg 文件的属性

include-system-site-packages = True

这将导致使用安装在 main 上的包

【讨论】:

    【解决方案2】:

    我在寻找如何在 virtualenv 中强制安装某些东西时到达这篇文章,尽管它已经安装在全局 python 中。当使用--system-site-packages 创建虚拟环境时会发生这种情况。

    在这种情况下,对于某些包,在 virtualenv 中拥有本地版本可能很重要,即使对于许多其他包我们可以共享全局版本。例如,pytest 就是这种情况。但是,如果 pip 已经可以在系统站点中找到最新版本,则 pip 将拒绝在 virtualenv 中安装软件包。

    解决方法是使用pip install --ignore-installed mypackage

    【讨论】:

    • 我相信这应该是正确的答案。该问题特别要求一种“强制在 virtualenv 中安装包,尽管它存在于系统的全局包文件夹中”的方法。因此,这个答案提供了正确的解决方案。像其他建议的答案一样升级软件包是错误的选择,因为这可能会更改 requirements.txt 中指定的软件包版本。
    【解决方案3】:

    问题出在 Webfaction VPS 中

    在 /home/username/webapps/appName/env/lib/python2 中需要一个名为 sitecustomize.py 的空文件。

    那个空文件会覆盖他们的 python 自定义,其中之一是在 ~/lib/python2.7 目录中包含任何包。

    您可能需要停用虚拟环境并再次激活它才能使更改生效。

    【讨论】:

      【解决方案4】:

      不要像./venv/bin/pip install ...那样安装setuptoolsDjango,而是先尝试激活你的虚拟环境,然后再安装你需要的东西。

      激活虚拟环境:

      转到您的虚拟环境所在的文件夹(通常是项目的根文件夹),然后键入以下两者之一:

      • source venv/bin/activate (基于 Unix 的系统)
      • venv\Scripts\activate (Windows)

      这将确保您不会混合安装在不同环境中的软件包。

      强制重新安装软件包:

      • 可以通过添加:--upgrade-U 来完成简单升级
      • 可以通过添加来强制重新安装软件包:--force-reinstall

      在你的情况下(一旦环境被激活)

      python -m pip install -U --force-reinstall setuptools Django
      

      一步一步:

      1. 停用并删除旧的虚拟环境
      2. 使用python -m virtualenv venv (python 2) 或 python -m venv venv (python 3) 创建新环境

        上面的

        python 是您要在项目中使用的解释器。这是您可能要使用的唯一点,例如 python3 或一些绝对路径。稍后按原样使用代码。

      3. source venv/bin/activate

        激活虚拟环境

      4. python -m pip install -U pip

        如果您对ImportError: No module named _internal 有疑问,那么您可能使用的是旧版本的 pip。问题描述here

      5. python -m pip install -U --force-reinstall -r requirements.txt

        -U --force-reinstall在新鲜环境的情况下有点矫枉过正,但不会造成伤害

      6. 到你的manage.py所在的地方,使用python manage.py runserver启动服务器

      【讨论】:

      • 通过从我的 requirements.txt 中删除一个包来解决,但仍然得到错误的版本...当我运行 pip freeze 时,它​​显示 1.8.11 但是当我运行 runserver 它使用一个。当我写'which python'时,它会显示我的路径(venv/bin/python)......有没有优先使用哪个包??
      • 它将使用 active 环境中的包。您确定在运行python manage.py runserver之前激活了安装新版本setuptoolsDjango的环境吗? (活动环境的名称显示在终端每行开头的括号中。在尝试运行服务器之前,您应该看到类似 (venv) myName@myHost:/some/path$ 的内容.)
      • 当然有(venv),也试过venv/bin/python backend/manage.py runserver 也一样
      • 也许吧,但只要你在激活的环境中运行所有命令,如python -m ...,系统路径就无关紧要了。尽管您可能在环境中弄乱了站点包。您是否尝试过完全删除环境,设置一个新环境并使用 requirements.txt 重新安装所有软件包?
      • 我在答案中添加了“逐步”部分。尝试完全按照原样进行操作,同时不要添加额外的步骤。如果没有帮助,请提供您使用的全套命令及其输出。
      猜你喜欢
      • 1970-01-01
      • 2014-02-10
      • 1970-01-01
      • 2015-04-11
      • 2017-01-26
      • 2018-10-02
      • 1970-01-01
      • 2013-06-13
      • 2012-03-25
      相关资源
      最近更新 更多