在Ubuntu 16.04中,当我执行python3.6 -m venv myenvironment
时,venv
不会在../myenvironment/bin
中安装python 3.6二进制文件,而只会符号链接到系统二进制文件。 3.6的官方文档提出了其他建议:
28.3.1。 。 。 (venv)还会创建一个bin子目录,其中包含python二进制文件的副本。
除非“复制”表示符号链接,否则venv
不会执行文档中所述的操作。 pip二进制文件在那里,但不存在python 3.6或任何其他版本的二进制文件。
也许没关系,因为在该环境中3.6将是使用的版本。但是,它将使用哪些模块/软件包? venv
did 按预期创建lib/python3.6/site-packages
子目录。我是否应该假设除非我放置了不同版本的模块/软件包,否则系统范围的库将在此虚拟环境中使用?
编辑:在部分回答我自己的问题时,Ubuntu 16.04上的默认设置似乎是venv
不安装python二进制文件。添加--copies
选项将强制venv
将二进制文件放入环境的../bin
目录中。 venv
按预期为环境site-packages
创建一个子目录。但是,它没有将标准库模块/程序包放入环境的../lib/python3.6 sub-directory
中。
根据print(sys.path)
的输出(从环境中运行时),环境的python副本仍会在系统的/usr/lib/python3.6
目录中查找标准库。我想这是可以的,但是是否有人想使用标准库中模块或软件包的特定版本呢? -library模块/软件包位于环境的site-packages
子目录中?
第二次编辑:这是关于venv
关于标准库模块和软件包的行为的SO Q&A:
Where is the standard library in python virtual environment?
答案的要点是venv
不会在环境目录中创建标准库的副本。始终使用系统范围的标准库。该问答中至少有一位参与者评论说,venv
表现得很奇怪。对我来说似乎也很奇怪。有人知道为什么吗?