0

我的项目结构是:

$ 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/python3sys.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', '/usr/lib64/python36.zip', '/usr/lib64/python3.6', '/usr/lib64/python3.6/lib-dynload', '/path/to/project/venv/lib64/python3.6/site-packages', '/path/to/project/venv/lib/python3.6/site-packages']

如您所见,根据是执行 sym-link 还是调用了直接 exec,sys 路径正在发生变化。

例如,符号链接包含/usr/lib/python3.6/site-packages但 venv 中的实际可执行文件包含/path/to/project/venv/lib/python3.6/site-packages.

我该如何解决?

当我尝试导入硒时,我得到:

$ ../py
>>> import selenium
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'selenium'
4

0 回答 0