【发布时间】:2019-06-18 08:54:42
【问题描述】:
我正在尝试激活 python 环境并在 bash 文件中使用 pip 安装一些包。在环境中安装成功但在我的mac上也全局安装,不明白为什么。
script.sh:
#!/bin/bash
source '<absolute path>/venv/bin/activate'
which pip
pip install psutil
pip list
输出:
$ ./script.sh
<absolute path>/venv/bin/pip
...
Package Version
---------------- ---------
pip 19.0.3
psutil 5.6.3
setuptools 41.0.1
wheel 0.33.1
但是,在另一个没有虚拟环境的终端中,它也会被安装:
$ which pip
/usr/local/opt/python/libexec/bin/pip
$ pip list
Package Version
---------------- ---------
pip 19.0.3
psutil 5.6.3
setuptools 41.0.1
wheel 0.33.1
如果我在终端中一一键入脚本中的命令,它会按预期工作。
我错过了什么?
编辑:
如果我运行 pip freeze | xargs pip uninstall -y(在 env 中或全局中),它将删除 virtualenv 和全局中的包。
如果我再次运行脚本并在“站点包”ls venv/lib/python3.7/site-packages 中列出内容,则安装的包不存在,所以我的“venv/bin/pip”以某种方式指向我的全局“站点包”?
编辑2:
我找到了一种重现行为的方法。
1.创建环境python -m venv venv_test
2.激活环境. venv_test/bin/activate
3.在script.sh中编辑source '<absolute path>/venv_test/bin/activate'
4.运行脚本./script.sh
为什么这会使 pip 全局安装?
如果我跳过 2. 它会按预期工作。
【问题讨论】: