如何在 virtualenv 中强制安装包?

How to force install package in virtualenv?

尝试在系统中安装不同版本的 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)

不要像 ./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

  7. 启动服务器

问题出在 Webfaction VPS

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

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

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

我在寻找如何在 virtualenv 中强制安装一些东西时遇到了这个 post,尽管它已经安装在全局 python 中。当使用 --system-site-packages.

创建虚拟环境时会发生这种情况

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

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

解决方法但有效!

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

include-system-site-packages = True

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