这个问题使我挠头了一段时间。
我现在在Windows 7和Windows 10上两次遇到了这个问题。由于它是一个封闭的网络,因此我对W7没有任何安全担忧。
我有一个现有的Python 2.7安装-人口稠密,带有一些相当老的库版本。 尽管我想为Python 2.7创建一个虚拟环境,但我不愿意这样做,因为我需要使用的许多库版本都无法使用转轮,而且某些较旧的库似乎没有可用的修订历史记录。也可以,因此如果不尝试使用它们,就无法确定更高版本的库是否向后兼容。由于Python 2.7代码来自生产环境,因此我无法破坏/替换它。
所有python 2.7库都是从可执行安装程序安装的,因为它们中有许多是早于 python wheel standard的介绍。有些还需要使用旧版本的MSVC进行构建,这是不希望重建的另一个原因。
尽管我最初的计划是创建一个单独的2.7虚拟环境,但是将python 2.7保持原样安装并开始在虚拟环境中运行Python 3会容易得多。
示例Python 3虚拟环境创建为“ py37”。
在我的虚拟环境中。
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.
然后我创建了两个简单的脚本,一个使用python 2打印格式,另一个使用python 3。
即使虚拟环境显示python 3,而python版本显示3.7.3,python 3脚本也无法运行。
python 2版本的打印可以正确打印,因此即使所有迹象表明Python 3正在运行,也很明显它实际上是Python 2。
PythonPath在PC上为null /未定义,并且我的path变量指向我的python 3虚拟环境,而不是我的Python 2安装。
当version()或Python -V
返回3.x时,我提出的所有搜索和示例都停止了,因此,如果是重复的问题,我将无法找到原始请求。
答案 0 :(得分:0)
解决这个问题的方法很简单,但令人不愉快。
为了使一切正常运行,每次我想运行它时,我都需要明确标识要运行的可执行文件,即python3虚拟环境中python可执行文件的完整路径。
我最终创建了一个批处理文件包装程序来简化此操作
例如c:\ apps \ my_venv3 \ scripts \ python.exe%*
笨拙,但是它可以可靠地运行,并且不会破坏任何现有环境。