首页 > 解决方案 > 虚拟环境的问题 - python

问题描述

我的虚拟环境有问题,我正在学习 python,所以真的不知道这里出了什么问题。

我的桌面上有一个名为“learning”的文件夹,我正在尝试在其中创建一个名为 venv 的虚拟环境。

当我在 VSCode 中时,我正在使用终端并写出python -m venv venv以下内容:

PS C:\Users\XXX\Desktop\learning> virtualenv venv
created virtual environment CPython3.9.5.final.0-64 in 1553ms
  creator CPython3Windows(dest=C:\Users\XXX\Desktop\learning\venv, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\XXX\AppData\Local\pypa\virtualenv)
    added seed packages: pip==21.1.2, setuptools==57.0.0, wheel==0.36.2
  activators BashActivator,BatchActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
PS C:\Users\XXX\Desktop\learning> python -m venv venv
[{'first': 'Csr', 'last': 'vR'}, {'first': 'Jessie', 'last': 'vdd'}, {'first': 'Bill', 'last': 'Gates'}]
Traceback (most recent call last):
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 15, in <module>
    import importlib.util
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\importlib\util.py", line 2, in <module>
    from . import abc
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\importlib\abc.py", line 17, in <module>
    from typing import Protocol, runtime_checkable
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\typing.py", line 22, in <module>
    import collections.abc
ModuleNotFoundError: No module named 'collections.abc'; 'collections' is not a package
PS C:\Users\XXX\Desktop\learning> python -m venv try
[{'first': 'Csr', 'last': 'vR'}, {'first': 'Jessie', 'last': 'vdd'}, {'first': 'Bill', 'last': 'Gates'}]
Could not import runpy module
Traceback (most recent call last):
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\runpy.py", line 15, in <module>
    import importlib.util
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\importlib\util.py", line 2, in <module>
    from . import abc
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\importlib\abc.py", line 17, in <module>
    from typing import Protocol, runtime_checkable
  File "C:\Users\XXX\AppData\Local\Programs\Python\Python39\lib\typing.py", line 22, in <module>
    import collections.abc
ModuleNotFoundError: No module named 'collections.abc'; 'collections' is not a package

正如您所看到的,由于某种原因,它正在从文件夹“学习”中名为 collections.py 的文件中回溯代码。不知道为什么。现在,当我使用“virtualenv venv”时它工作正常,但我试图理解为什么其他命令不起作用。

标签: pythonvirtualenv

解决方案


它来自同一文件夹中名为“collections.py”的python文件

该模块以某种方式隐藏collections了标准库中的模块。当typing.py尝试 importcollections.abc时,导入机制会找到您的模块名为collectionsfirst,但您的模块不是包含模块 name 的包abc,因此您会收到错误消息。

最简单的解决方法是将您自己的文件重命名为其他文件。然而,Python 引入了绝对导入和相对导入之间的区别来解决此类冲突。可能有一种方法可以构建您的目录,以避免您的本地模块代替标准库模块。

virtualvenv与模块完全不同的脚本venv;它可能不会尝试导入标准collections模块,因此名称冲突不会影响它。


推荐阅读