Python virtualenv: После активации pip по-прежнему остается основным

#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 решило проблему, но я не уверен, почему это происходит…