如何解决符号链接到 python exec 和 python exec 有不同的 sys 路径这会导致 ModuleNotFoundError
我的项目结构是:
$ tree . -L 2
.
├── venv
│ ├── bin
│ ├── include
│ ├── lib
│ ├── lib64 -> lib
│ ├── pip-selfcheck.json
│ └── pyvenv.cfg
├── py -> /path/to/project/venv/bin/python3
├── README.md
├── req.txt
└── source
└── sym.py
我有一个符号链接,py
指向 venv 中 python 可执行文件的实际位置。这是为了确保我的 python 可执行文件没有硬编码在脚本中,并且可以快速部署到任何地方,同时仍然包含一个shebang。
现在,当我调用符号链接 py
与实际的 Python 可执行文件 /path/to/project/venv/bin/python3
时,sys.path
值会发生变化。以下在文件夹中执行:/path/to/project/source/
:
$ ls -l ../py
lrwxrwxrwx. 1 som cms-script-admins 45 Apr 17 19:39 ../py -> /path/to/project/venv/bin/python3
$ cat sym.py
import sys
print(sys.path)
$ ../py sym.py
['/path/to/project/source','/usr/lib64/python36.zip','/usr/lib64/python3.6','/usr/lib64/python3.6/lib-dynload','/usr/local/lib64/python3.6/site-packages','/usr/lib64/python3.6/site-packages','/usr/lib/python3.6/site-packages']
$ /path/to/project/venv/bin/python3 sym.py
['/path/to/project/source','/path/to/project/venv/lib64/python3.6/site-packages','/path/to/project/venv/lib/python3.6/site-packages']
如您所见,根据是执行sym-link还是调用direct exec,sys路径正在发生变化。
例如,符号链接包含 /usr/lib/python3.6/site-packages
,但 venv 中的实际可执行文件包含 /path/to/project/venv/lib/python3.6/site-packages
。
我该如何解决这个问题?
当我尝试导入 selenium 时,我得到:
$ ../py
>>> import selenium
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
ModuleNotFoundError: No module named 'selenium'
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。