#python #pip #vagrant #virtualenv
Вопрос:
Я запускаю Ubuntu 20.04 на бродячей гостевой машине.
Я установил virtualenv
через apt ( apt install virtualenv
), а затем создал виртуальную среду python3, подобную этой:
virtualenv -p $(which python3) .venv
Это результат, который я получил:
created virtual environment CPython3.8.10.final.0-64 in 161ms
creator CPython3Posix(dest=/srv/apps/bali/bali-backoffice/app/.venv, clear=False, global=False)
seeder FromAppData(download=False, pip=latest, setuptools=latest, wheel=latest, pkg_resources=latest, via=copy, app_data_dir=/home/vagrant/.local/share/virtualenv/seed-app-data/v1.0.1.debian.1)
activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
Теперь, если я активирую этот virtualenv, python
команда ссылается на тот, который находится в .venv
папке, но pip
команда, однако, ссылается на тот , который находится в операционной /usr/bin
системе, как указано в этом выводе:
vagrant@v-host:/home/vagrant/app$ source .venv/bin/activate
(.venv) vagrant@v-host:/home/vagrant/app$ which python
/home/vagrant/app/.venv/bin/python
(.venv) vagrant@v-host:/home/vagrant/app$ which pip
/usr/bin/pip
(.venv) vagrant@v-host:/home/vagrant/app$
В чем причина этого? Как я могу это исправить?
Обновление №1 Забыл упомянуть, но pip
исполняемый файл находится в bin
папке virtualenv.
Ответ №1:
Я только что узнал, как устранить ошибку, но я еще не совсем уверен, почему это решение работает.
.venv
Папка находилась внутри синхронизированной папки. Хотя python
исполняемый файл создавался с помощью символической ссылки /usr/bin/python3
, pip
исполняемый файл загружался и включался в .venv/bin
папку. Я проверил разрешения , назначенные файлам и каталогам внутри Vagrantfile
, и это было то, что у меня было:
config.vm.synced_folder _conf['synced_folder'],
_conf['document_root'], :create => "true", :mount_options => ['dmode=755', 'fmode=644'],
SharedFoldersEnableSymlinksCreate: false
Изменение fmode
значения на 755 решило проблему, но я не уверен, почему это происходит…