Почему «установка pip» в virtualenv вызывает «Не удается выполнить установку «—user»»?

#python #pip #virtualenv

Вопрос:

  • Примечание: имя пользователя здесь airflow указано во всех командах ниже:
 e.g. airflow@my-worker-0:~$ which python
 

У меня установлен Python3.8 (глобально) на моей машине Debian GNU/Linux 10(сервер Airflow):

 $ which python
>> /usr/local/bin/python

$ python --version
>> Python 3.8.10

$ which pip
>> /usr/local/bin/pip
 

И ниже речь идет о конфигурациях pip:

 $ pip config list
:env:.user='true'

$ pip config list -v
Skipping file '/etc/xdg/pip/pip.conf' (variant: global)
Skipping file '/etc/pip.conf' (variant: global)
For variant 'user', will try loading '/home/airflow/.pip/pip.conf'
For variant 'user', will try loading '/home/airflow/.config/pip/pip.conf'
Skipping file '/usr/local/pip.conf' (variant: site)
:env:.user='true'
 

Одна странная вещь заключается в том, что все conf вышеперечисленные файлы не существуют:

 $ cat /home/airflow/.config/pip/pip.conf
>> bash: /home/airflow/.config/pip/pip.conf: No such file or directory
$ cat /etc/xdg/pip/pip.conf
>> cat: /etc/xdg/pip/pip.conf: No such file or directory
$ cat /etc/pip.conf
>> cat: /etc/pip.conf: No such file or directory
$ cat /home/airflow/.pip/pip.conf
>> cat: /home/airflow/.pip/pip.conf: No such file or directory
$ cat /home/airflow/.config/pip/pip.conf
>> cat: /home/airflow/.config/pip/pip.conf: No such file or directory
$ cat /usr/local/pip.conf
>> cat: /usr/local/pip.conf: No such file or directory
 

И я создал virtualenv и попытался установить пакет python, но получил ошибку:

 $ virtualenv /tmp/apache-beam-venv-wow --python=python3.8
>> created virtual environment CPython3.8.10.final.0-64 in 243ms
  creator CPython3Posix(dest=/tmp/apache-beam-venv-wow, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/airflow/.local/share/virtualenv)
    added seed packages: pip==21.1.3, setuptools==57.4.0, wheel==0.36.2
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator

$ ls -alh /tmp/apache-beam-venv-wow/
>> total 12K
drwxr-xr-x 4 airflow airflow   64 Aug 16 01:49 .
drwxrwxrwt 1 root    root    4.0K Aug 16 02:24 ..
-rw-r--r-- 1 airflow airflow   40 Aug 16 01:03 .gitignore
drwxr-xr-x 2 airflow airflow  285 Aug 16 01:03 bin
drwxr-xr-x 3 airflow airflow   23 Aug 16 01:03 lib
-rw-r--r-- 1 airflow airflow  225 Aug 16 01:03 pyvenv.cfg

$ ls -alh /tmp/apache-beam-venv-wow/bin
>> total 56K
drwxr-xr-x 2 airflow airflow  285 Aug 16 01:03 .
drwxr-xr-x 4 airflow airflow   64 Aug 16 01:49 ..
-rw-r--r-- 1 airflow airflow 2.1K Aug 16 01:03 activate
-rw-r--r-- 1 airflow airflow 1.5K Aug 16 01:03 activate.csh
-rw-r--r-- 1 airflow airflow 3.0K Aug 16 01:03 activate.fish
-rw-r--r-- 1 airflow airflow 1.8K Aug 16 01:03 activate.ps1
-rw-r--r-- 1 airflow airflow 1.2K Aug 16 01:03 activate.xsh
-rw-r--r-- 1 airflow airflow 1.2K Aug 16 01:03 activate_this.py
-rwxr-xr-x 1 airflow airflow  245 Aug 16 01:03 pip
-rwxr-xr-x 1 airflow airflow  245 Aug 16 01:03 pip-3.8
-rwxr-xr-x 1 airflow airflow  245 Aug 16 01:03 pip3
-rwxr-xr-x 1 airflow airflow  245 Aug 16 01:03 pip3.8
lrwxrwxrwx 1 airflow airflow   21 Aug 16 01:03 python -> /usr/local/bin/python
lrwxrwxrwx 1 airflow airflow    6 Aug 16 01:03 python3 -> python
lrwxrwxrwx 1 airflow airflow    6 Aug 16 01:03 python3.8 -> python
-rwxr-xr-x 1 airflow airflow  232 Aug 16 01:03 wheel
-rwxr-xr-x 1 airflow airflow  232 Aug 16 01:03 wheel-3.8
-rwxr-xr-x 1 airflow airflow  232 Aug 16 01:03 wheel3
-rwxr-xr-x 1 airflow airflow  232 Aug 16 01:03 wheel3.8

$ /tmp/apache-beam-venv-wow/bin/pip install requests
>> ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
WARNING: You are using pip version 21.1.3; however, version 21.2.4 is available.
You should consider upgrading via the '/tmp/apache-beam-venv-wow/bin/python -m pip install --upgrade pip' command.
 

И я pip config также запускаю команды на pip этого virtualenv:

 $ /tmp/apache-beam-venv-wow/bin/pip config list
>> :env:.user='true'

$ /tmp/apache-beam-venv-wow/bin/pip config list -v
>> Skipping file '/etc/xdg/pip/pip.conf' (variant: global)
Skipping file '/etc/pip.conf' (variant: global)
For variant 'user', will try loading '/home/airflow/.pip/pip.conf'
For variant 'user', will try loading '/home/airflow/.config/pip/pip.conf'
Skipping file '/tmp/apache-beam-venv-wow/pip.conf' (variant: site)
:env:.user='true'
 

Я хочу знать, почему pip virtualenv устанавливает пакеты с использованием --user опций и как это предотвратить.

Что я пробовал:

 $ /tmp/apache-beam-venv-wow/bin/pip config get :env:.user
true

$ /tmp/apache-beam-venv-wow/bin/pip config set ':env:.user' false
Writing to /home/airflow/.config/pip/pip.conf

$ cat /home/airflow/.config/pip/pip.conf
[:env:]
user = false

$ ./pip install requests
ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
WARNING: You are using pip version 21.1.3; however, version 21.2.4 is available.
You should consider upgrading via the '/tmp/apache-beam-venv-wow/bin/python -m pip install --upgrade pip' command.
 

Комментарии:

1. Есть ли проблемы с разрешениями? Вы пробовали работать в качестве sudo ?

2. @ObsidianAge К сожалению, у меня нет разрешения на выполнение команды sudo

3. Тогда это похоже на проблему. Если вы не судоер, вы не сможете войти /tmp . Попробуйте перенести его в свой домашний каталог.

4. Что это такое: :env:.user='true' ???

5. Можете ли вы попробовать echo $PIP_USER и set | grep -Fi user ???

Ответ №1:

Во-первых, активируйте среду (env) перед установкой пакетов, как здесь

 virtualenv mypython #name virtual env
source /root/mypython/bin/activate #path of environments
 

Не используйте каталог /tmp/ , вы можете создать собственный каталог для использования в средах.

Лучше использовать pip install requests вместо ./pip install requests и проверять, есть ли у вас разрешение airflow или root или у другого пользователя

Комментарии:

1. Я боюсь, что это не сработает. Это вызвало ту же ошибку ( source /tmp/apache-beam-venv-wow/bin/activate amp; pip install requests )

2. не используйте каталог /tmp/, лучше создать свой собственный каталог для сред

Ответ №2:

этот:

 $ /tmp/apache-beam-venv-wow/bin/pip config list
>> :env:.user='true'
 

указывает на то, что вы PIP_USER=1 установили в своей среде (возможно, из-за .bashrc /etc/environment файла или?)

снимите эту настройку, и это должно прекратить принудительное --user выполнение ваших команд установки (переменные среды переопределяют файлы конфигурации для pip)

 unset PIP_USER