Я пытаюсь активировать среду Python и устанавливаю некоторые пакеты, используя pip в файле bash. Он успешно устанавливается в среде, но также устанавливается глобально на моем 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, так и глобально.
Если я снова запускаю сценарий и перечисляю содержимое в 'site-packages' ls venv/lib/python3.7/site-packages
, установленного пакета там нет, поэтому мой 'venv / bin / pip' каким-то образом указывает на мои глобальные 'site-packages'?
edit2:
Я нашел способ воспроизвести поведение.
1. создать среду python -m venv venv_test
2. активировать среду . venv_test/bin/activate
3. изменить source '<absolute path>/venv_test/bin/activate'
в script.sh
4. запустить скрипт ./script.sh
Почему это заставляет pip устанавливать глобально?
Если я пропущу 2. это работает как положено.