如何解决虚拟环境中的python 3.8如何构造sys.path?
当我在python3.8虚拟环境中检查sys.path
时,发现有些奇怪的地方。具体来说,我的playground
中具有以下层次结构:
.
├── mmdetection
├── monodepth2
├── py37
├── py38
└── qd-track
当我调用python环境py38
并查看sys.path
成员时,我注意到以下模式:
dian@ubuntu:~/playground$ ls
mmdetection monodepth2 py37 py38 qd-track
dian@ubuntu:~/playground$ source py38/bin/activate
(py38) dian@ubuntu:~/playground$ python
Python 3.8.0 (default,Oct 28 2019,16:14:01)
[GCC 8.3.0] on linux
Type "help","copyright","credits" or "license" for more information.
>>> import sys
>>> sys.path
['','/usr/lib/python38.zip','/usr/lib/python3.8','/usr/lib/python3.8/lib-dynload','/home/dian/playground/py38/lib/python3.8/site-packages','/home/dian/playground/mmdetection','/home/dian/playground/py38/lib/python3.8/site-packages/terminaltables-3.1.0-py3.8.egg','/home/dian/playground/py38/lib/python3.8/site-packages/mmpycocotools-12.0.3-py3.8-linux-x86_64.egg','/home/dian/playground/qd-track','/home/dian/playground/py38/lib/python3.8/site-packages/motmetrics-1.2.0-py3.8.egg','/home/dian/playground/py38/lib/python3.8/site-packages/mmcv-1.1.5-py3.8-linux-x86_64.egg','/home/dian/playground/py38/lib/python3.8/site-packages/xmltodict-0.12.0-py3.8.egg','/home/dian/playground/py38/lib/python3.8/site-packages/scipy-1.5.3-py3.8-linux-x86_64.egg','/home/dian/playground/py38/lib/python3.8/site-packages/pytest_benchmark-3.2.3-py3.8.egg']
有趣的是,mmdetection
选择了qd-track
级别的py38
和sys.path
,而monodepth2
和{{1 }}不是。我将py37
的名称更改为mmdetection
,并创建了两个新的空文件夹mmdetection2
,detectron
,这使当前文件夹看起来像:
detectron2
然后我尝试再次打印sys.path并得到:
.
├── detectron
├── detectron2
├── mmdetection2
├── monodepth2
├── py37
├── py38
└── qd-track
这次,(py38) dian@ubuntu:~/playground$ python
Python 3.8.0 (default,'/home/dian/playground/detectron2','/home/dian/playground/py38/lib/python3.8/site-packages/pytest_benchmark-3.2.3-py3.8.egg']
消失了,mmdetection2
被捡起了,而detectron2
却没有。这太奇怪了,因为路径似乎是由python快速检测到的,而不是从某些固定索引中读取的。准确地检测到它们的方式令我感到困惑。我检查了detectron
,它为空。
更有趣的是,我尝试切换到PYTHONPATH
并排的py37
环境,并且上面没有描述任何事情:
py38
所以,我想这可能是由于从python3.8开始对加载机制进行了一些新的更改?而且,当我使用sys.path时我应该期待什么行为?官方文档没有提供要包含在sys.path中的项目的确切列表。
通过我使用Ubuntu 18.04.3 LTS的方式; (py38) dian@ubuntu:~/playground$ deactivate
dian@ubuntu:~/playground$ source py37/bin/activate
(py37) dian@ubuntu:~/playground$ python
Python 3.7.5 (default,Nov 7 2019,10:50:52)
[GCC 8.3.0] on linux
Type "help",'/usr/lib/python37.zip','/usr/lib/python3.7','/usr/lib/python3.7/lib-dynload','/home/dian/playground/py37/lib/python3.7/site-packages','/home/dian/playground/py37/lib/python3.7/site-packages/terminaltables-3.1.0-py3.7.egg']
和py37
是通过virtualenv创建的。
任何想法都是值得欢迎和赞赏的!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。