Как правильно создать символьную c ссылку на интерпретатор Python? - PullRequest
0 голосов
/ 05 февраля 2020

В Ubuntu 18.04 я установил Python 3.7 и виртуальную среду в /home/sss/dev/venv/3.7 Пакеты сайтов venv находятся в /home/sss/dev/venv/3.7/lib/python3.7/site-packages -

~/dev/venv/3.7/bin/python -m site
sys.path = [
    '/home/sss/dev',
    '/usr/lib/python37.zip',
    '/usr/lib/python3.7',
    '/usr/lib/python3.7/lib-dynload',
    '/home/sss/dev/venv/3.7/lib/python3.7/site-packages',
]
USER_BASE: '/home/shane/.local' (exists)
USER_SITE: '/home/shane/.local/lib/python3.7/site-packages' (exists)
ENABLE_USER_SITE: False

Далее я создал символьную c ссылку в моем домашнем каталоге, предназначенном для интерпретатора Python в виртуальной среде -

ln -s /home/sss/dev/venv/3.7/bin/python ~/py
ls -l  py
lrwxrwxrwx 1 sss sss 35 feb  5 08:52 py -> /home/sss/dev/venv/3.7/bin/python

, но когда я использую эту ссылку вместо /home/sss/dev/venv/3.7/bin/python, я ожидаю, что она будет иметь доступ к пакетам в /home/sss/dev/venv/3.7/lib/python3.7/site-packages , но это не тот случай -

./py -m site
sys.path = [
    '/home/sss/dev',
    '/usr/lib/python37.zip',
    '/usr/lib/python3.7',
    '/usr/lib/python3.7/lib-dynload',
    '/home/sss/.local/lib/python3.7/site-packages',
    '/usr/local/lib/python3.7/dist-packages',
    '/usr/lib/python3/dist-packages',
]
USER_BASE: '/home/sss/.local' (exists)
USER_SITE: '/home/sss/.local/lib/python3.7/site-packages' (exists)
ENABLE_USER_SITE: True

Есть ли обходной путь к этой проблеме?

1 Ответ

1 голос
/ 12 февраля 2020

Я считаю, что это не может работать. Расположение py имеет значение. Чтобы учесть виртуальную среду , py будет искать определенные файлы c в местах, относящихся к ее собственной. Например, он будет искать ../pyvenv.cfg, и если он не может найти этот файл, то виртуальная среда полностью игнорируется (является ли она активной или нет, в таком случае это не имеет значения). Я полагаю, что py должен находиться в каталоге bin виртуальной среды и нигде больше.


Не совсем точно, каково первоначальное намерение, но, возможно, вы могли бы написать py оболочка оболочки вместо символьной ссылки c, например, приведенной ниже (просто пример, ее, вероятно, нужно улучшить, чтобы она была действительно полезной):

#!/usr/bin/env sh

/home/sss/dev/venv/3.7/bin/python "$@"

Такой сценарий можно разместить в любом месте, и это всегда будет учитывать виртуальную среду.

...