微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

虚拟环境中的python 3.8如何构造sys.path?

如何解决虚拟环境中的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级别的py38sys.path,而monodepth2和{{1 }}不是。我将py37名称更改为mmdetection,并创建了两个新的空文件mmdetection2detectron,这使当前文件夹看起来像:

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?