【问题标题】:Issue with virtual environment - python虚拟环境的问题 - python
【发布时间】:2021-06-17 19:47:09
【问题描述】:

我的虚拟环境有问题,我正在学习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”时它工作正常,但我试图了解为什么其他命令不起作用。

【问题讨论】:

  • 请编辑问题
  • 试试python3 -m venv venv
  • 输出中的列表来自哪里?
  • 另外,python -m venv venv 应该创建一个虚拟环境,但您已经使用virtualenv 创建了一个。我怀疑python -m venv 没有执行标准库中的venv 模块,而是您在本地具有相同名称的其他模块。
  • 建议你做@It_is_Chris 所做的事情,它使问题更具可读性。

标签: python virtualenv


【解决方案1】:

您已经创建了虚拟环境 (venv)。无需再次输入python -m venv venv

要激活虚拟环境 (venv),请键入

PS C:\Users\XXX\Desktop\learning> venv/Scripts/activate

这将在 powershell 中激活名为 venv 的虚拟环境。

【讨论】:

  • 嗨,首先感谢您抽出宝贵时间思考 :)。我忘了提到在两个命令之间我删除了文件夹,所以当我触发第二个命令时虚拟环境不再存在(当我第一次尝试 python -m venv venv 时也得到了相同的输出而没有想到我可以使用virtualenv venv。
【解决方案2】:

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

该模块以某种方式掩盖了标准库中的collections 模块。当typing.py 尝试导入collections.abc 时,导入机制首先找到名为collections您的 模块,但您的模块不是包含模块名称abc 的包,所以您得到错误。

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

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

【讨论】:

  • 你是 100% 正确的,我的好先生,将其重命名为 collectionss 以进行测试,现在一切正常。给你的道具。
【解决方案3】:

在 VSCode 中,您还可以通过在左下角选择 venv 来激活它。这是确认您使用的环境的简单参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-20
    • 2020-10-20
    • 2022-01-11
    • 1970-01-01
    • 2021-10-03
    相关资源
    最近更新 更多