PyCharm 导入方式与系统命令提示符 (Windows) 有何不同

2024-03-02

尽管我的脚本在 PyCharm 中工作,但我在 cmd 提示符下运行脚本时遇到问题。我有这样的文件夹结构:

MyCode # PyCharm project folder
  /UsefulFunctions
    /Messaging
      /Texter.py
  /DiscordBot
    /DiscordBot.py

在 DiscordBot.py 中我有一个导入

from UsefulFunctions.Messaging import Texter

当我从 PyCharm 运行它时没有问题,这是有效的。但是,当我尝试从位于的命令提示符运行时DiscordBot将其错误级别为:

导入错误:没有名为“UsefulFunctions”的模块

所以很自然地我认为这意味着UsefulFunctions文件夹不在我的路径上。因此,我进入我的环境变量并将其添加到我的PATH变量(以及MyCode文件夹以达到良好的效果)。还是遇到了这个错误。我在这里浏览了一些关于进口的帖子(主要是从不同文件夹导入文件 https://stackoverflow.com/questions/4383571/importing-files-from-different-folder/4383597#4383597),他们建议这样做:

import sys
sys.path.insert(0, '/path/to/application/app/folder')
import file

或者添加__init__.py文件到每个文件夹,以便将它们注册为包。我继续添加__init__文件到我尝试从中导入的每个文件夹和子文件夹,但仍然无法从命令提示符运行...我省略了sys.path.insert()解决方案,因为在已经明确地将其添加到我的PATH多变的。另一种解决方案是添加“.”。在导入之前,因为据说它只是搜索 python 的 PATH。我尝试这样做:

from .UsefulFunctions.Messaging import Texter

ImportError:尝试在没有已知父包的情况下进行相对导入

这个错误现在也显示在 PyCharm 上...我不明白为什么我的初始脚本可以在 PyCharm 上顺利运行,但从提示符运行时,同一个程序似乎无法找到我的导入。有人可以解释一下 PyCharm 运行程序和我的提示之间的区别吗?尽管有,为什么这不起作用__init__.py files and添加了MyCode and UsefulFunctions到 Windows 上的 PATH 变量?


From [Python.Docs]:命令行和环境 - PYTHONPATH https://docs.python.org/using/cmdline.html#envvar-PYTHONPATH:

增加模块文件的默认搜索路径。格式与 shell 的 PATH 相同:一个或多个目录路径名,以 分隔os.pathsep https://docs.python.org/library/os.html#os.pathsep(例如 Unix 上的冒号或 Windows 上的分号)。不存在的目录将被默默忽略。

您还可以找到更多详细信息[SO]:使用 Pycharm 调试 PyQt gui 时出现奇怪的错误(@CristiFati 的回答) https://stackoverflow.com/a/55066132/4788546.

所以,为了Python为了能够加载模块(包)而不指定其路径,该路径必须存在于%Python路径%环境变量。

你提到%PATH%问题中出现过几次,但它是%Python路径% (MyCode必须添加到其中)。

PyCharm这样做是因为下图中的(任何)2 个复选框(可以从菜单触发对话框:Run -> 编辑配置...):

如果你想让事情顺利进行CmdLine,你也必须在那里做同样的事情:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q054955891\DiscordBot]> sopr.bat
### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ###

[prompt]> set py
Environment variable py not defined

[prompt]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" DiscordBot.py
Traceback (most recent call last):
  File "DiscordBot.py", line 1, in <module>
    from UsefulFunctions.Messaging import Texter
ModuleNotFoundError: No module named 'UsefulFunctions'

[prompt]> set PYTHONPATH=e:\Work\Dev\StackOverflow\q054955891

[prompt]> set py
PYTHONPATH=e:\Work\Dev\StackOverflow\q054955891

[prompt]> "e:\Work\Dev\VEnvs\py_064_03.06.08_test0\Scripts\python.exe" DiscordBot.py
e:\Work\Dev\StackOverflow\q054955891\UsefulFunctions\Messaging\Texter.py imported

相反,在PyCharm(与内容根源上面的相关复选框,已选中),可以添加更多内容根,如下图所示(菜单:File -> 设置..., 选择项目结构 then 添加内容根目录):

当一些必需的模块位于项目树的较深处(以及一些dirs 无效Python包名称)。


因此,在处理此类情况时,请检查[Python.Docs]:sys.path https://docs.python.org/3/library/sys.html#sys.path, [Python.Docs]:os.getcwd() https://docs.python.org/3/library/os.html#os.getcwd和模块路径,可以节省大量浪费的时间和令人头痛的事情:

import os
import sys

print(sys.path)
print(os.getcwd())

import some_module
print(some_module)

顺便说一句,我个人讨厌以My (e.g. MyCode)。这样的名称告诉我,任何实体“佩戴”它的目的对于编写代码的人来说并不清楚。尝试找到一个更有用的名称(例如测试机器人项目, or smth相似的) :)。

[SO]:PyCharm 无法识别已安装的模块(@CristiFati 的回答) https://stackoverflow.com/a/73363599/4788546可能还包含一些有用的信息。

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

PyCharm 导入方式与系统命令提示符 (Windows) 有何不同 的相关文章

  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • 我怎样才能在python cgi中找到上传的文件名

    我制作了如下简单的网络服务器 import BaseHTTPServer os cgi import cgitb cgitb enable html
  • 引发 RuntimeError(f"目录 '{directory}' 不存在") RuntimeError: 导入 fitz 时目录 'static/' 不存在

    当我运行 extract img py 文件时出现此错误 RuntimeError f 目录 directory 不存在 运行时错误 导入 fitz 时不存在目录 static 我不明白为什么这会给我发回此错误消息 我之前看到过关于这个话题
  • 创建一个打开文件并创建字典的函数

    我有一个正在处理的文件 我想创建一个读取文件并将内容放入字典中的函数 然后该字典需要通过 main 函数传递 这是主程序 它无法改变 我所做的一切都必须与主程序配合 def main sunspot dict file str raw in
  • 如何在Python中的BeautifulSoup4中使用.next_sibling时忽略空行

    由于我想删除 html 网站中重复的占位符 因此我使用 BeautifulSoup 的 next sibling 运算符 只要重复项位于同一行 就可以正常工作 参见数据 但有时它们之间有一个空行 所以我希望 next sibling 忽略它
  • 十六进制数的按位异或

    我们如何在 Python 中对十六进制数进行异或 例如 我想要异或 ABCD and 12EF 答案应该是 B922 我使用了下面的代码 但它给出了错误的结果 xor two strings of different lengths def
  • 绘制“plot”而不是“scatter”时,图例选择会中断

    再会 这个问题是后续问题为什么图例选取仅适用于 ax twinx 而不适用于 ax https stackoverflow com q 60167378 9282844 下面提供的最小代码分别绘制了两条曲线ax1 and ax2 ax1 t
  • Pyinstaller --onefile 警告文件已存在但不应存在

    跑步时Pyinstaller onefile 并开始得到结果 exe 会出现多个弹出窗口 并显示以下警告 WARNING file already exists but should not C Users myuser AppData L
  • 向 Python 2.6 添加 SSL 支持

    我尝试使用sslPython 2 6 中的模块 但我被告知它不可用 安装OpenSSL后 我重新编译2 6 但问题仍然存在 有什么建议么 您安装了 OpenSSL 开发库吗 我必须安装openssl devel例如 在 CentOS 上 在
  • 在ansible中合并字典

    我目前正在构建一个使用 ansible 安装 PHP 的角色 并且在合并字典时遇到一些困难 我尝试了多种方法来做到这一点 但我无法让它像我想要的那样工作 A vars file my default values key value my
  • 在Python中计算结构体的CRC

    我有以下结构 来自 C 中的 NRPE 守护程序代码 typedef struct packet struct int16 t packet version int16 t packet type uint32 t crc32 value
  • 如何使用数据库在 Django 中的应用程序之间交换数据?

    我正在使用 Django 在网络上工作 我创建了 2 个应用程序 第一个用于客户端注册并将其数据添加到数据库 第二个应用程序供用户访问和查看交互界面 这个想法是使用第二个应用程序从数据库中的客户端获取数据 并使用它向用户显示一些信息 我的问
  • 在openjdk:7-jre-alpine docker上如何安装python 3.6

    直到大约一周前 我才在 java 图像上成功使用 python 3 6 脚本 如下所示 FROM openjdk 7 jre alpine RUN apk update apk upgrade apk add no cache bash a
  • 如何得到将外力映射到广义力的矩阵?

    给定一个多体植物 我需要找到将外力 lambda 转换为广义力的矩阵 IE 以下方程中的 Phi 取自 Scott Kuindersma Frank Permenter 和 Russ Tedrake 的 稳定动态运动的有效可解二次规划 我的
  • 网页抓取 - 如何识别网页上的主要内容

    给定一个新闻文章网页 来自任何主要新闻来源 例如时报或彭博社 我想识别该页面上的主要文章内容 并丢弃其他杂项元素 例如广告 菜单 侧边栏 用户评论 在大多数主要新闻网站上都可以使用的通用方法是什么 有哪些好的数据挖掘工具或库 最好是基于Py
  • 在 scrapy 中将基本 url 与结果 href 结合起来

    下面是我的蜘蛛代码 class Blurb2Spider BaseSpider name blurb2 allowed domains www domain com def start requests self yield self ma
  • Jupyter Notebook 中的多处理与线程

    我试图测试这个例子here https ipywidgets readthedocs io en stable examples Widget 20Asynchronous html将其从线程更改为多处理 在 jupyter Noteboo
  • 使 matplotlib 图形默认看起来像 R?

    Is there a way to make matplotlib behave identically to R or almost like R in terms of plotting defaults For example R t
  • 如何动态创建 Luigi 任务

    我正在为 Luigi Tasks 构建一个包装器 但遇到了一个障碍Register http luigi readthedocs io en stable modules luigi task register html Register该
  • 在读/写二进制数据结构时访问位域

    我正在为二进制格式编写一个解析器 这种二进制格式涉及不同的表 这些表同样采用二进制格式 通常包含不同的字段大小 其中 50 100 个之间 大多数这些结构都有位域 并且在 C 语言中表示时看起来像这样 struct myHeader uns

随机推荐

  • 如何更改 Flutter 桌面应用程序的应用程序图标和应用程序名称?

    我正在使用 Flutter 开发 Windows 桌面应用程序 但不知道如何更改应用程序的名称和图标 我想我已经找到了解决方案 以下应该适用于 Windows 应用程序 更改应用程序图标 只需将图标文件放在下面windows runner
  • 如何测量Qt中函数的运行时间?

    我正在打电话argon2 https en wikipedia org wiki Argon2 Qt 中的内存密集型哈希函数并测量其运行时间 QTime start QTime currentTime call hashing functi
  • IIS 7 日志请求正文

    我需要记录向 IIS 发出的请求的请求发布负载 是否可以使用 IIS 7 5 中的现有日志记录和高级日志记录模块来配置请求发布有效负载的日志记录 或者任何人都可以引导我使用允许我记录发布有效负载的任何自定义模块 实际上是可以做到的 根据ht
  • (C# 7.2)“private protected”修饰符的用例是什么?

    C 7 2 引入了 private protected 修饰符 https learn microsoft com en us dotnet csharp language reference keywords private protec
  • laravel 5.4 中 ResetPasswords.php 中未定义路由 [password.reset]

    我在我的自定义应用程序中收到此错误 InvalidArgumentException in UrlGenerator php line 304 Route password reset not defined 我知道 laravel 提供了
  • 鼠标光标位置改变

    您好 我有一个 Windows 窗体应用程序 我想移动鼠标 然后拖放将起作用 但我尝试使用 mousemove 鼠标事件来执行此操作 但似乎拖放非常敏感 所以我要问的是是否可以检测鼠标光标是否从当前光标移动至少一定距离 然后执行拖放代码 我
  • 如何在 C# 中恢复 SQL Server 2012 数据库 .bak 文件?

    我在 Windows 窗体中开发了一个 MIS 其中我备份了 SQL Server 2012 数据库 但我无法恢复备份 bak file 这是我的代码 private void buttonRestore Click object send
  • Mongodb 分片无法在分片之间分割大型集合

    我在 mongodb 中看似简单的分片设置时遇到了问题 我有两个分片 一个 mongos 实例和一个配置服务器 设置如下 机器 A 10 0 44 16 配置服务器 mongos机器 B 10 0 44 10 分片 1机器 C 10 0 4
  • 在 Linux 上捕获 CPU 使用情况的侵入性较小的方法

    工具怎么样Net SNMP http en wikipedia org wiki Net SNMP捕获CPU使用情况 在 Linux 下 侵入性最小的方法是什么 侵入性较小 这样做会消耗最少的机器资源 CPU 和 RAM 最终数据将被保存到
  • Angular:使用带有分隔符/分隔符的 ng-repeat 获取列表

    对 Angular 来说还很陌生 只是在寻找解决办法 我正在使用 ng repeat 输出按字母顺序排列的名称列表 我想在此列表中添加分隔线作为标签 Example A Author 1 Author 2 B Author 3 Author
  • Rails i18n:我可以关闭“翻译丢失”错误吗?

    我有一个多租户应用程序 我正在尝试使用 i18n gem 来允许我们的每个客户根据自己的喜好自定义系统 更改各个页面上的文本 自定义电子邮件等等 诚然 我并没有像预期那样使用 i18n 因为我实际上并没有翻译不同的 语言 一切都是英语 但每
  • Java:JPQL日期函数将一个时间段添加到另一个日期[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SELECT x FROM SomeClass WHERE x dateAtt BETWEEN CUR
  • SQL标准中真的有必要有GROUP BY吗

    编写 SQL 几年后 我发现必须放置我感兴趣的列常常很烦人SELECT然后在中再次指定它们GROUP BY 我不禁想 我们为什么要这么做 用户必须具体指定按哪一列进行分组的原因是什么 难道我们不能让 SQL 引擎假设如果有一个聚合函数SEL
  • 关于选择数据类型

    如果在表的某一列中我希望值为 是 否 或 可选 那么我需要使用什么数据类型 BIT 占用 1 个字节 但在 SQL Server 中最多可以将 8 个 BIT 字段合并为一个 BYTE 存储两个值之一 1 表示 true 和 0 表示 fa
  • 检查 AAR 元数据值时发现的一个或多个问题:

    嘿 我正在尝试运行我的应用程序 但收到此错误 构建 gradle plugins id com android application id kotlin android id kotlin kapt android compileSdk
  • 如何以编程方式增加 iPhone 中的 UITableView 单元格高度?

    我有单独的定制UITableViewCell用于显示数据 这些数据来自服务器 JSON 响应 在每个UITableViewCell我有 阅读更多 按钮 如果用户单击 阅读更多 按钮 我想以编程方式添加UILabel用于显示来自服务器的附加信
  • 如何制作带折角的 45 度响应丝带?

    是否可以创建角形的 css 丝带 我尝试过使用 png 图像 但是是否有任何选项可以使用 css 创建 也应该与响应式视图一起使用 container width 200px height 200px position relative m
  • PWA:重定向到子域时显示地址栏

    我有一个有时使用子域的 PWA 当应用程序重定向到另一个子域时 我发现出现问题 地址栏显示 这会影响类似应用程序的体验 有人知道使用子域时隐藏地址栏的解决方案吗 重定向到子域时我也遇到了类似的问题 当 PWA 未正确设置为像应用程序一样运行
  • sqlite 附加两个具有完全相同架构的数据库中的两个表

    我正在将数据写入 SQLite 数据库 但由于数据集非常大 因此我将这个过程分为五个部分 结果 我同时写入五个不同的sqlite数据库 每个数据库都有相同的列名 最后 我想将五个数据库中的五个表一起附加到一个表中 有什么方法可以做到这一点
  • PyCharm 导入方式与系统命令提示符 (Windows) 有何不同

    尽管我的脚本在 PyCharm 中工作 但我在 cmd 提示符下运行脚本时遇到问题 我有这样的文件夹结构 MyCode PyCharm project folder UsefulFunctions Messaging Texter py D