这个问题已经让我挠头一段时间了。
我已经在windows7和windows10上遇到过两次这个问题了,因为它是一个封闭的网络,所以我对W7没有任何安全顾虑。
我有一个现有的Python2.7安装密集型,其中包含一些相当旧的库版本。虽然我想为Python2.7创建一个虚拟环境,但我不愿意这样做,因为我需要使用的许多库版本都没有轮子可用,而且一些较旧的库似乎也没有修订历史记录,所以如果不尝试它们,我就不能判断较新的库版本是否向后兼容。因为Python2.7代码来自生产环境,所以我不能中断/替换它。
Python2.7库都是从可执行安装程序安装的,因为它们中的许多都早于python轮子标准的引入。有些还需要使用旧版本的MSVC构建,这是不想尝试重建的另一个原因。
尽管我最初的计划是创建一个单独的2.7虚拟环境,但让Python2.7安装原样并开始在虚拟环境中运行Python3会容易得多。
创建为"py37“的Python3虚拟环境示例。
在我的虚拟环境中。
include-system-site-packages = false当我激活虚拟环境时,一切看起来都很好。
Python -V返回3.7.3,这是我所期望的
我修改了我的脚本以输出python版本(这样我就可以跟踪发生了什么)
(py37) C:\my_folder\my_script.py
3.7.3 (v3.7.3:ef4c6ed12, Mar 25, 2019, 21:26:53) [MSC v.1916 32 bit (Intel)]
Traceback (most recent call last):
file "my_script.py", line 24, in (module)
from tk import ttk
ModuleNotFoundError: No module named 'tk'. 'tk' (python 3 lib) is not being found.然后我创建了两个简单的脚本,一个使用python2打印格式,另一个使用python3。
即使虚拟环境显示为python 3,而python版本显示为3.7.3,python 3脚本也无法运行。
Python2版本的print打印正确,所以很明显,即使所有指示都表明Python3正在运行,但它实际上是Python2。
PythonPath为空/未在PC上定义,并且我的path变量指向我的Python3虚拟环境,而不是Python2安装。
当version()或Python -V返回3.x时,我想出的所有搜索和示例都会停止,所以如果这是一个重复的问题,我无法找到原始请求。
发布于 2020-03-10 02:37:04
这个问题的解决方案很简单,但并不令人愉快。
为了让一切正常工作,我需要显式地确定我想要运行的可执行文件,每次我想要运行它的时候,也就是我的python3虚拟环境中python可执行文件的完整路径。
我最终创建了一个批处理文件包装器来促进这一点。
例如c:\apps\my_venv3\scripts\python.exe %*
笨重,但它的工作,可靠,不会破坏任何现有的环境。
https://stackoverflow.com/questions/59849798
复制相似问题