【问题标题】:Module installed returning ModuleNotFoundError安装的模块返回 ModuleNotFoundError
【发布时间】:2020-08-20 07:08:25
【问题描述】:

我正在使用virtualenvwrapper 管理一个我现在正在运行的项目

import apache_beam as beam
from apache_beam.options.pipeline_options import PipelineOptions

with beam.Pipeline(options=PipelineOptions()) as p:
    pass

这将返回以下错误

Traceback (most recent call last):
  File "path/to/pipeline.py", line 1, in <module>
    import apache_beam as beam
ModuleNotFoundError: No module named 'apache_beam'

我已经运行pip install apache-beam。运行pip list 返回

➜ pip list  
Package                        Version
------------------------------ ---------
apache-beam                    2.23.0
avro-python3                   1.9.2.1
...

我将按照类似question 中的建议添加以下输出。

pip freeze

➜ pip freeze
apache-beam==2.23.0
avro-python3==1.9.2.1
...

pip -V

➜ pip -V    
pip 20.2.2 from /Users/miguel/.virtualenvs/myenv/lib/python3.7/site-packages/pip (python 3.7)

python -V

➜ python -V        
Python 3.7.3

which python

➜ which python
/Users/miguel/.virtualenvs/myenv/bin/python

which pip

➜ which pip   
/Users/miguel/.virtualenvs/myenv/bin/pip

我不知道这是否相关,但我正在使用 VSCode,并且我已根据 VSCode 指令here 选择了我的 python 解释器。另外,我按照here的说明安装了python。

知道为什么会这样吗?

【问题讨论】:

  • 您是否尝试过测试在 VSCode 之外设置的环境?例如,打开终端/命令提示符,激活您的虚拟环境,然后使用此 venv 在终端中运行 Python。然后,一旦 Python 在终端中运行,您就可以尝试使用 apache_beam 进行导入。如果是模块安装/依赖问题,或者您的 venv 在 VSCode 中没有按预期运行,我认为这将有助于缩小范围。
  • 谢谢!我刚试过这个,它确实有效,所以在这种情况下它可能是一个 VSCode 问题。我不明白,因为它运行的是我上面提到的同一个解释器......
  • 太好了,所以它看起来像一个 VSCode 环境设置,我将结合上述问题测试的答案和一些关于如何在 VSCode 中设置 Python 环境的提示
  • 我已经发布了一个答案,让我知道它是否有效。如果不是,我将在我的机器上重新创建步骤以重新创建和解决问题,并在答案中发布更多信息。

标签: python visual-studio-code virtualenvwrapper


【解决方案1】:

首先测试您安装的 Python 模块是否在 VSCode 等 ide 之外工作。 我们可以通过打开终端/命令提示符并激活我们的虚拟环境来做到这一点。在这种情况下,当您使用 virtualenvwrapper 时,您需要使用以下命令:

workon myenv

virtualenvwrapper 的文档可以在 here 找到。激活后,我们可以在终端中使用以下命令打开 Python 解释器:

python

运行后,尝试像使用之前一样导入 apache_beam:

import apache_beam as beam

如果这可行,我们现在知道这是使用 VSCode 设置虚拟环境的问题。要在 VSCode 中为 Python 设置虚拟环境,请使用官方文档 Using Python environments in VS Code。这应该允许您指定虚拟环境。

如果这不起作用,另一种选择是在 VSCode 中创建一个新的虚拟环境并安装您的模块。在 VSCode 中将模块安装到环境中可以在您的帖子中linked 的 VSCode 说明中找到。

我尝试使用以下方法重新创建您的问题:

  • Python 3.7.7
  • VSCode 1.48.0
  • apache-beam 2.23.0

我的虚拟环境被命名为“堆栈”。一旦我创建了它,我安装的唯一模块就是 apache-beam 使用:

pip install apache-beam

创建项目时,我创建了目录并通过终端启动:

 - mkdir hello
 - cd hello
 - code .

然后通过命令添加Python解释器:

Python: Select Interpreter

我需要的一个额外步骤(因为我通常使用 PyCharm for Python)是安装:

Shell Command: Install 'code' command in PATH** command.

允许通过终端启动代码。以下是执行这些步骤并运行与您的问题中发布的相同命令以供参考后的项目屏幕截图。

我的.vscode/settings.json如下:

{
    "python.pythonPath": "/Users/robertyoung/envs/stack/bin/python"
}

【讨论】:

  • 感谢您的回答!最初的部分确实有效,所以我同意这似乎是使用 VSCode 设置虚拟环境的问题。但是,我不知道那可能是什么,因为 (1) VSCode 正确找到了我的 virtualenv 和 (2) 我从“Python: Select Interpreter”中选择了 virtualenv,指定为 here。如果我按下播放图标 (⌃⌥N),我会收到错误消息。但是,如果我执行“Python:在终端中运行 Python 文件”,它确实可以工作。
  • 您是在 Windows 还是 Mac/Linux 上运行?
  • 我正在运行 Mac
  • 顺便说一句,当我发布该评论时,它才意识到它使用“Python:在终端中运行 Python 文件”运行。
  • 我试图在我的 Mac 上重现这个问题,使用 virtualenvwrapper 设置一个新的虚拟环境,新的 VSCode 项目并将解释器设置为这个新的 env。我使用 pip install apache-beam 并且它能够正确导入。我将在我的答案中添加图片,这些图片将显示我为查看它们是否有帮助而采取的步骤
猜你喜欢
  • 2018-01-23
  • 2022-01-11
  • 2020-01-12
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-08
  • 2020-10-12
相关资源
最近更新 更多