PyCharm 项目文件夹记录出现 ModuleNotFoundError 错误

2024-01-06

我正在 PyCharm 中从事一个项目。该项目具有以下结构:

/projectRoot/
   folder1/
       somecode.py
   utils/
       __init__.py
       myutils1.py

我想知道如何进行导入,以便在以交互方式在 pyCharm 控制台中运行代码时以及使用

python somecode.py 

终端中的命令。

目前我这样做:

from utils.myutils1.py import myClass

但命令行我收到错误:

文件“somecode.py”,第 10 行,位于 from utils.myutils1 import myClass ModuleNotFoundError:没有名为“utils”的模块

在 PyCharm 上:

回溯(最近一次调用最后一次):文件 “/home/ubuntu/anaconda3/lib/python3.6/site-packages/IPython/core/interactiveshell.py”, 第 2881 行,在 run_code 中 exec(code_obj, self.user_global_ns, self.user_ns) 文件“”,第 1 行,位于 from utils.myutils1 import myClass ModuleNotFoundError:没有名为“utils”的模块

关于项目中模块的正确文件夹结构以及如何正确导入它们有什么建议吗?

Thanks!


为了解释答案,我重新创建了您的项目结构

/projectRoot/
   folder1/
       somecode.py
   utils/
       __init__.py
       myutils1.py

一些代码.py

from utils.myutils1 import myclass

if __name__ == "__main__":
   print(myclass)

myutils1.py

myclass="tarun"

从 pycharm 运行它们没有任何问题,但从终端运行它们将产生以下错误

  File "somecode.py", line XX, in <module>
    from utils.myutils1 import myclass
ModuleNotFoundError: No module named 'utils'

问题是 Pycharm 为您做的事情很少,这就是它无法在终端中运行的原因。因此,在告诉您需要做什么之前,我将告诉您 PyCharm 本身所做的两件事。

Python控制台

当您从 Pycharm 启动 Python 控制台时,会使用首选项执行一些代码。

正如你所看到的,有两个选项

[X] Add content roots to PYTHONPATH
[ ] Add source roots to PYTHONPATH

然后还有一个启动脚本。所以它的作用是将项目的根添加到 python 的路径中。主要由两种方式控制sys.path and PYTHONPATH环境变量

如果我在 Python 控制台中运行以下代码

>>> import sys
>>> sys.path
['/Applications/PyCharm.app/Contents/helpers/pydev', 
'/Applications/PyCharm.app/Contents/helpers/pydev', 
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python27.zip', 
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7', ....
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages', 
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27']

如你看到的'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27'已添加到 Python 终端。

Python 配置

当您使用 Pycharm 配置为在代码中运行时,您有类似的两个选项。

我们可以改变我们的代码somecode.py到下面

import os
print (os.environ['PYTHONPATH'])

import sys
print (sys.path)

/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27
['/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27/folder1', 
'/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27', ....,
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages']

从输出中我们可以看到PYTHONPATH设置为当前项目文件夹。

从终端运行

现在让我们运行somecode.py从终端与我们所做的修改。

$ python somecode.py
Traceback (most recent call last):
  File "somecode.py", line 2, in <module>
    print (os.environ['PYTHONPATH'])
  File "/Users/tarun.lalwani/.virtualenvs/folderstructure27/bin/../lib/python2.7/UserDict.py", line 40, in __getitem__
    raise KeyError(key)
KeyError: 'PYTHONPATH'

所以这表明没有PYTHONPATH当我们在终端运行它时。让我们通过删除来再次运行它print(os.environ['PYTHONPATH'])代码。您将得到以下输出

['/Users/tarun.lalwani/Desktop/payu/projects/folderstructure27/folder1', ...
'/Users/tarun.lalwani/.virtualenvs/folderstructure27/lib/python2.7/site-packages']
Traceback (most recent call last):
  File "somecode.py", line 7, in <module>
    from utils.myutils1 import myclass
ImportError: No module named utils.myutils1

如你看到的folder1被添加到sys.path因为它是包含的文件夹somecode.py,但根文件夹尚未添加。终端中的修复很简单,就是在 PYTHONPATH 中设置根目录路径。

PYTHONPATH=`pwd`/.. python somcode.py

现在代码也可以在终端上运行。

但它们的工作方式与Python Console不同。

重要的提示: 在远程解释器上使用 PyCharm 的 Python 控制台。

If running the python console using the remote interpreter option pycharm will fail. This is because it will append the path of the local PC and not the path of the remote server. In order to fix this problem one has to add a mapping between the local PC directory and the remote server path. pycharmRemoteConfig pycharmRemoteConfig2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PyCharm 项目文件夹记录出现 ModuleNotFoundError 错误 的相关文章

随机推荐

  • 在 NetworkX 中同时创建属性和边(如果存在相同的属性)

    在 NetworkX 中创建节点后 如果两个节点 至少 具有一个重叠的相同属性 我想在节点之间添加边 这似乎是一个问题 并非所有节点都包含相同数量的属性 可能是这种情况 如果是 我应该如何解决 import networkx as nx f
  • Java 获取默认 UI 颜色

    例如 我如何找到 JList 中的默认选择颜色 这些颜色存储在哪里 对于 Swing 组件 您可以在应用程序范围内获取和设置默认颜色UIDefaults http download oracle com javase 6 docs api
  • 刷新令牌如何比长期存在的 JWT 更安全?

    在将 JWT 与自然不安全的客户端 浏览器 手机等 一起使用时 我很难理解刷新令牌的使用 对我来说 如果 JWT 被泄露 那么刷新令牌也不会被泄露 这种想法似乎很天真 只要刷新令牌保持有效 攻击者本质上就拥有无限的 JWT 来源 即使您使使
  • Sql 密码生成器 - 8 个字符,大写和小写,包括数字 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我需要在 SQL 中创建一个新密码
  • 类声明与构造函数内初始化对象的区别

    我正在为我的对象进行对象初始化和构造函数初始化 但无法得到我的问题的准确答复 这里Case1和Case2有什么区别 Case 1 namespace ConsoleApplication2 class MyBuilder private M
  • 覆盖我的可观察变量会杀死当前订阅者吗?

    我希望能够缓存 http 调用 但也强制刷新缓存 我的服务如下所示 Injectable export class UserService private currentUser Observable
  • 如何在 python 多处理中创建共享的二维数组

    我需要使用 python 的多重处理来处理一个大矩阵 这就是说我需要二维数组 该数组应该由不同的子进程以同步方式共享 访问 更新 因此我使用mp Manager 在创建数组时 multiprocess Array 让我创建一个一维数组 我尝
  • .NET 的自然语言日期/时间解析器? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有谁知道 NET 日期 时间解析器类似于Ruby 的慢性病 http chronic rubyforg
  • 如何禁用 UIButton?

    我正在开发一个项目 其中我必须在 plist 中显示照片库的所有照片 并在UIButtons 我的应用程序还将有一个编辑按钮 当用户单击此按钮时 每个按钮上应显示删除标记 例如通常出现在其他 iPhone iPad 应用程序中 但关键的是
  • 如何将 put 的输出作为输入提供给过程?

    我有一个将列表打印为格式化表格的过程 它有像 print table temp 这样的用例 我如何给出不同过程的输出 其中我使用 puts 命令打印输出作为该过程 print table 的输入 set list1 abc 1 defg 2
  • CoreData ManagedObjectContext 递归保存错误

    我的一些用户在执行保存时遇到 CoreData 错误 我无法在网上找到有关此错误或如何符号化堆栈跟踪的任何信息 错误信息是attempt to recursively call save on the context aborted sta
  • 如何在keras中记录val_loss和每批次的损失

    我正在使用keras中的回调函数来记录loss and val loss每个纪元 但我想按批次做同样的事情 我发现了一个回调函数on batch begin self batch log 但我不知道如何使用它 这是自定义回调的示例 遵循并修
  • 无法打开输入文件

    我正在编写一个基本程序 它将从文本文件中读取整数列表 并将文件中的最小整数和最大整数输出到屏幕 我确保文本文件与源代码文件位于同一文件夹中 并且文件的名称与我在代码中调用的名称相同 无论如何 程序都无法打开该文件 我怎样才能解决这个问题 这
  • 方法提取会对代码性能产生负面影响吗?

    假设你有一个很长的方法 大约有 200 行对时间非常敏感代码 将代码的某些部分提取到单独的方法中是否可能会减慢执行速度 最有可能的是 你会得到加速 问题是优化 200 行的野兽是很困难的 实际上 当方法太长时 Hotspot就会放弃它 有一
  • Android 类解析中的奇怪事情

    我在 Android 上观察到相当多的行为 我正在处理 multidex 问题 所以我在 4 4 4 中使用模拟器 这让我对 Android 类加载无语 Android 上的类有not应该在被类加载器加载时解析 但是如果我创建一个类 pub
  • C++ 中的内联 ntohs() / ntohl() / Boost ASIO

    嗨 我正在使用 C Boost ASIO 我必须内联ntohl 出于性能原因 每个数据包包含 256 个 int32 因此需要大量调用ntohl 有人这样做过吗 以下是 VC10 的编译后的程序集输出 所有优化均已打开 int32 t d
  • 完成不是护照js中的函数错误

    我使用 Passport js 进行身份验证和会话 我从 mysql 获取用户名并从客户端获取输入字段 但是当done被要求进行验证 我得到done is not a function 服务器 js var express require
  • Xcode 8 红色文件但不丢失

    我刚刚在我的一个 iOS 项目中看到一个奇怪的错误 我正在使用 Xcode 8 最新版本 我有一些课程与其他项目一起分享 这些文件通过引用添加到项目中 如果我需要编辑它们 我只需编辑一次 一切正常 但我发现在我的一个项目中 许多文件都是红色
  • dplyr 包:如何使用“%xyz%”SQL 语法查询大型数据框?

    dplyr 是唯一可以处理我的 843k data frame 并快速查询它的包 我可以使用一些数学和相等标准进行精细过滤 但是我需要实现对概念的搜索 我需要像这样的 sqldf 查询 library sqldf head iris sql
  • PyCharm 项目文件夹记录出现 ModuleNotFoundError 错误

    我正在 PyCharm 中从事一个项目 该项目具有以下结构 projectRoot folder1 somecode py utils init py myutils1 py 我想知道如何进行导入 以便在以交互方式在 pyCharm 控制台