Python 3.7 阻碍其他 Python 版本在虚拟环境中的使用

标签 python python-3.x windows python-venv

我安装了 Python 3.6.3 和 Python 3.7,当我尝试使用 3.6.3 设置虚拟环境时,它抛出一个错误,尽管尝试遵循 SO 的建议,但似乎正在调用 Python 3.7下面列出的链接。 Windows 10 并首先检查 Python 3.6.3 可执行文件的位置:

C:\>py -3.6
Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 18:11:49) [MSC v.1900 64 bit (AMD64)] on win32
import sys
print(sys.executable) #C:\Python\python.exe

现在遵循来自 here 的已接受答案:

C:\>mkdir pyvirtenv && cd pyvirtenv
C:\pyvirtenv>py -3.6 -m venv pyvirtenv

我收到以下错误:

File "C:\Python37\lib\runpy.py", line 183, in _run_module_as_main
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "C:\Python37\lib\runpy.py", line 142, in _get_module_details
    return _get_module_details(pkg_main_name, error)
  File "C:\Python37\lib\runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "C:\Python37\lib\venv\__init__.py", line 7, in <module>
    import logging
  File "C:\Python37\lib\logging\__init__.py", line 26, in <module>
    import sys, os, time, io, traceback, warnings, weakref, collections.abc
  File "C:\Python37\lib\traceback.py", line 5, in <module>
    import linecache
  File "C:\Python37\lib\linecache.py", line 11, in <module>
    import tokenize
  File "C:\Python37\lib\tokenize.py", line 33, in <module>
    import re
  File "C:\Python37\lib\re.py", line 123, in <module>
    import sre_compile
  File "C:\Python37\lib\sre_compile.py", line 17, in <module>
    assert _sre.MAGIC == MAGIC, "SRE module mismatch"
AssertionError: SRE module mismatch

即使使用 3.6 命令,似乎也正在调用 Python 3.7 然后我尝试了上一篇文章中接受的答案所建议的进一步替代方案,即:将 py -3.6 替换为可执行路径,但仍然存在相同的错误

还尝试使用 virutalenv 而不是 Windows 特定解决方案中概述的 venv here但最终的错误仍然没有改变:

C:\pyvirtenv>virtualenv -p C:\Python\python.exe pyvirtenv
Traceback (most recent call last):
  File "C:\Python37\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "C:\Python37\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python\Scripts\virtualenv.exe\__main__.py", line 2, in <module>
  File "C:\Python37\lib\re.py", line 123, in <module>
    import sre_compile
  File "C:\Python37\lib\sre_compile.py", line 17, in <module>
    assert _sre.MAGIC == MAGIC, "SRE module mismatch"
AssertionError: SRE module mismatch

使用 Python 3.7 设置虚拟环境工作正常,即使在我从 PATH 中完全删除 Python 3.7 并重新启动后,上述问题仍然存在。

谢谢

编辑

按照评论中的要求添加 py -3.6 -m site 的输出:

sys.path = [
    'C:\\pyvirtenv',
    'C:\\Python\\python36.zip',
    'C:\\Python37\\DLLs',
    'C:\\Python37\\lib',
    'C:\\Python37',
    'C:\\',
]
USER_BASE: 'C:\\Users\\shanlodh\\AppData\\Roaming\\Python' (doesn't exist)
USER_SITE: 'C:\\Users\\shanlodh\\AppData\\Roaming\\Python\\Python36\\site-packages' (doesn't exist)
ENABLE_USER_SITE: False

edit2

根据以下第二轮评论进一步更新:

c: \> py -3.6 -c "import site; print(site.__file__)" #C:\Python37\lib\site.py
c:\>python37\lib\site.py
sys.path = [
    'C:\\python37\\lib',
    'C:\\Python37\\python37.zip',
    'C:\\Python37\\DLLs',
    'C:\\Python37',
    'C:\\',
]
USER_BASE: 'C:\\Users\\shanlodh\\AppData\\Roaming\\Python' (doesn't exist)
USER_SITE: 'C:\\Users\\shanlodh\\AppData\\Roaming\\Python\\Python37\\site-packages' (doesn't exist)
ENABLE_USER_SITE: False

最佳答案

从技术上讲,这不是您问题的答案,但如果您继续遇到相同的问题,这肯定是一个可以考虑的选项。无论如何,我建议您尝试做的是使用 Conda虚拟环境管理器。它似乎在 windows 和 unix 系统上都工作得非常好。

您还可以阅读 this question开始设置以前的 Python 版本环境。

希望这对您有所帮助。

关于Python 3.7 阻碍其他 Python 版本在虚拟环境中的使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53460925/

相关文章:

python - 计数子串

python-3.x - 如何安装audiodiff?

Windows 应用程序创建自转储

windows - 如何在 Perl 中构造独立于操作系统的文件路径,包括可选的 Windows 驱动器号?

python - 如何使用pywinauto模拟游戏中的按键

python - 变量作用域和更简洁的代码

python - 如何遍历一个类的所有实例?

python pandas - 使用 2 列作为引用进行映射

python - numpy 数组中存储的图像中像素的方向是什么?从左到右还是从上到下?

python - 通过 Python 访问 eBay 开发人员的 API?