Как я могу создать виртуальную среду python, которая включает только одну версию python / pip? - PullRequest
0 голосов
/ 28 мая 2020

У меня создалось впечатление, что если бы я создал среду python с определенной версией c python, она бы использовала только эту версию, но, похоже, я ошибался:

$ /usr/bin/python3 -m venv pyenv
$ ls pyenv
$ ls pyenv/bin
activate      activate.fish  easy_install      pip   pip3.8  python3
activate.csh  Activate.ps1   easy_install-3.8  pip3  python

Есть ли причина, по которой более старые версии python должны существовать вместе с текущей в моем venv? И могу ли я указать не делать этого или просто вручную удалить python2 / pip?

1 Ответ

2 голосов
/ 28 мая 2020

В вашей виртуальной среде все исполняемые файлы python* будут указывать на одну и ту же версию. Вы можете увидеть это по символам c ссылки:

$ /usr/bin/python3 -m venv pyenv

$ cd pyenv/bin

$ ls -l python*
lrwxrwxrwx 1 [user] [group]  7 May 28 05:49 python -> python3
lrwxrwxrwx 1 [user] [group] 16 May 28 05:49 python3 -> /usr/bin/python3

Аналогично, все исполняемые файлы pip будут копиями одного и того же файла:

$ ls -l pip*
-rwxr-xr-x 1 [user] [group] 212 May 28 05:49 pip
-rwxr-xr-x 1 [user] [group] 212 May 28 05:49 pip3
-rwxr-xr-x 1 [user] [group] 212 May 28 05:49 pip3.6

$ diff3 pip*
[no output]

Это означает, например, , что после запуска сценария activate, чтобы этот каталог bin находился в вашем PATH, вы найдете python в своей виртуальной среде независимо от того, набираете ли вы python или python3.

То же самое верно для python скриптов, которые вы вызываете, например, с #!/usr/bin/env python или #!/usr/bin/env python3.

Только если вы явно вызываете другую версию python (например, python2) или укажите полный путь к исполняемому файлу python (например, /usr/bin/python), возможно, вы найдете другую версию, расположенную в другом месте вашей системы.

...