如何正确创建指向Python解释器的符号链接?

问题描述 投票:0回答:1

在Ubuntu 18.04上,我在/home/sss/dev/venv/3.7中安装了Python 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

接下来,我在主目录中创建了一个指向虚拟环境中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

是否有解决此问题的方法?

python python-3.x symlink python-venv site-packages
1个回答
1
投票

我相信这行不通。 py的位置很重要。为了考虑virtual environmentpy将在相对于其自身的位置中查找某些特定文件。例如,它将查找../pyvenv.cfg,如果找不到该文件,则虚拟环境将被完全忽略(在这种情况下,是否处于活动状态并不重要)。我相信py必须位于虚拟环境的bin目录中,并且无其他地方。


不确定确切的初衷是什么,但是也许您可以编写一个py shell wrapper而不是符号链接,例如以下内容(仅作为示例,可能需要对其进行改进以使其真正成为有用):

#!/usr/bin/env sh

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

这样的脚本可以放在任何地方,并且始终会考虑虚拟环境。

© www.soinside.com 2019 - 2024. All rights reserved.