PyCharm无法在虚拟环境中找到包。

44
我使用最新版的PyCharm CE,并将其与virtualenv一起使用。我已将解释器定义为virtualenv中的解释器。在PyCharm中的Project Interpreter窗口中,列出了我安装的所有软件包。通过运行“pip freeze> requirements.txt”并手动查看这些软件包,我确认了这一点。
我的问题是PyCharm无法在编辑器窗口中找到某些包含内容,例如Flask-Login:
在“从flask.ext.login导入current_user、login_user、logout_user、login_required”的语句中,“current_user、login_user、logout_user、login_required”都被标记为未解决的引用。
我是否漏掉了什么?

3
我曾经遇到过这个问题,只是JetBrains有些不好用。尝试点击“文件”->“无效缓存并重启PyCharm”。你可能需要等待几分钟让它重新构建缓存。 - wim
1
在我的情况下,我不小心将新的虚拟环境添加到了原来旧环境所在的位置,而不是直接选择旧环境,导致了我的venv出现问题。解决方法是从Pycharm项目中删除venv目录(这也删除了本地venv)。之后,我建立了一个新的venv,并正确地将其添加到Pycharm中。 - Cerno
1
现在已经是2021年了,但我仍然面临着同样的问题...(Pycharm 2021.3.1专业版)。目前提供的答案都没有解决我的问题。 - Asriel
14个回答

78

问题可能出现在 PyCharm 选择了虚拟环境中错误的 '解释器路径'。请到这里:

PyCharm (menu) -> Preferences (Menu option)
               -> Project: <name> (Dropdown) 
               -> Project Interpreter (Menu option)
               -> 'Settings' button (Looks like a gear)
               -> More (Menu option)
               -> Select your virtualenv interpreter
               -> Click 'Show paths for interpreter' button (on bottom of list window)

现在,您已经找到了(虽然有些曲折)的位置,您应该能够看到解释器使用的路径。如果我的理论是正确的,这些路径指向全局系统位置。要添加虚拟环境路径,您应该点击 + 按钮并添加存在于虚拟环境中的相应路径。完成后,建议选择全局系统路径并单击 - 以将其删除。点击应用并转到 文件 -> 无效缓存 / 重新启动 以重新加载 PyCharm。

这样做可以让您的解释器指向您安装到虚拟环境中的库的正确位置,您将不再收到导入错误。请注意,即使进行此修复,您也不会在 项目解释器 下看到您的库,但它们应该正在被加载。


3
实际上这是正确的操作步骤(尽管PyCharm在这些方面显得有些原始,这有点荒谬)。 - gented
14
文件 -> 无效缓存 / 重新启动以重新加载 PyCharm。这是我之前没有做的事情。 - Yuseferi

9
在最新版本的PyCharm中(我的是2016.1.4),请按以下步骤操作:
  • 打开“设置”
  • 选择项目:项目名称
    • 选择“项目解释器”
    • 在右侧会出现一个下拉列表,您可以在其中选择解释器。这里应该有venv选项。
请参考下面的图片以获得更好的解释(就像他们说的,一张图片胜过千言万语)。

Setting python interpreter


这个回答不太清楚,我该如何处理venv选项?你是在暗示引用其他评论吗? - rrlamichhane
@rrlamichhane 这个问题明确说明他们在使用virtualenv,并且venv是使用virtualenv创建的默认文件夹。我相信你只需要在virtualenv中使用Python解释器即可。如果你安装的包在virtualenv中,它应该可以正常工作。 - dieend

3
请注意,接受的答案不再适用于PyCharm菜单结构。现在是文件 > 设置 > 项目 > 项目解释器 > 齿轮图标 > 显示全部 以下步骤详细说明了“核心”选项:
  1. 删除项目虚拟环境目录(例如/venv
  2. 删除在此帖子顶部列出的可访问菜单选项中列出的所有其他解释器。
  3. 关闭 PyCharm。
  4. 删除项目文件夹中的 .idea 目录。
  5. 重新启动 PyCharm,打开项目文件夹。
  6. 按照配置新解释器的过程执行操作。
这将基本上使您从头开始。

3
我注意到每当我打开一个不同的项目时,它仍然保留了我之前工作的项目中的虚拟环境(venv)。
我的处理方式是:
按下ctrl-alt-s(进入首选项),然后选择项目解释器/设置(齿轮图标),展示全部,然后删除所有不属于当前项目的venv环境(使用减号)。重启后,你就可以顺利进行了。

3

我也遇到了同样的问题(即使 Nathaniel Ford 和 dieend 给出了正确的建议,但仍然找不到包含文件)。确保你的运行/调试配置选择了正确的Python解释器:

enter image description here


0
对我来说,最简单的解决方案是在根目录中打开项目(我的项目有服务器和客户端目录,因此根目录包含它们两个)。当您在根目录中打开项目时,它能够按照惯例使用依赖项,而无需干扰pycharm设置。

0

打开 偏好设置 -> 项目 -> 项目解释器,你能看到模块吗?

如果是,可能在您的项目中有另一个文件与flask.ext.login相同的名称,这会防止pycharm找到实际的模块。

如果没有,您可以单击解释器旁边的...并选择更多...,选择您的解释器,在底部(筛选器旁边)点击显示所选解释器的路径,您可以在那里添加模块的路径。


我尝试了你建议的方法,但对我没有起作用。我甚至使用pypy创建了一个新的虚拟环境,但仍然找不到相同的包含文件。 - ruipacheco
抱歉,我不知道如何解决你的问题。 - J.Ku

0

将我的虚拟环境中的 lib 目录添加到 PyCharm CE 设置中的源中有所帮助。

我的步骤:

  1. 首选项 -> 项目:-> 项目结构

Scrin1

  1. 选择您安装库的目录。在我的情况下,这是 "lib"。

  2. 将目录标记为“源”。

Scrin2

执行这些操作后,所有我的库都能正确导入到我需要的 py 文件中。


0

简单的解决方案:(在PyCharm 2022.2.3和Python 3.11.0上运行Win11):

  • 为项目创建新的venv环境,不要继承site-packages
  • 检查jupyter-server是否使用新的venv(设置->语言和框架->Jupyter->Jupyter服务器)

将所有所需的软件包(包括jupyter!)安装到venv中(例如requirements.txt和PyCharm),这对我很有效。


0

我在WINDOWS和LINUX上遇到了同样的问题,并且每次将项目移动到不同的位置时,我都会遇到相同的问题...对我有效的方法是

将venv目录重命名

为venvxx(或其他你想要的名称),然后

创建新的虚拟环境

通过pycharm设置。之后你需要

将lib目录从venvxx(或其他你命名的文件夹)中复制

粘贴到新的venv中的lib内

这样至少对于我来说应该可以工作了,希望能帮助到有需要的人!然后重新启动pycharm,你的终端应该可以正常工作了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接