尽管我的脚本在PyCharm中运行,但在cmd提示符下运行时遇到了问题。我的文件夹结构如下:
MyCode # PyCharm project folder
/UsefulFunctions
/Messaging
/Texter.py
/DiscordBot
/DiscordBot.py
在www.example.com中DiscordBot.py我有一个导入
from UsefulFunctions.Messaging import Texter
当我从PyCharm运行它时,它可以正常工作。但是,当我试图从位于DiscordBot
级别的命令提示符运行时,它会出现错误:
导入错误:没有名为“UsefulFunctions”的模块
所以我很自然地认为这意味着UsefulFunctions
文件夹不在我的路径上。因此,我进入我的环境变量,并将其添加到我的PATH
变量(以及MyCode
文件夹)。仍然遇到了这个错误。我在这里浏览了一些关于导入的帖子(主要是从不同的文件夹导入文件),他们建议做如下操作:
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
导入错误:尝试相对导入没有已知的父包
这个错误现在也显示在PyCharm上了...我不明白为什么我的初始脚本在PyCharm上可以顺利运行,但是在提示符下运行的程序似乎找不到我的导入。有人能解释一下PyCharm运行的程序和我的提示符之间的区别吗?为什么尽管有__init__.py
文件和,这个程序还是不起作用在Windows上将MyCode
和UsefulFunctions
添加到我的PATH变量中?
4条答案
按热度按时间rsl1atfo1#
来自[Python.文档]:命令行和环境- PYTHONPATH:
增加模块文件的默认搜索路径。格式与shell的PATH相同:一个或多个目录路径名,以os.pathsep分隔(例如,在Unix上为冒号,在Windows上为分号)。不存在的目录将被忽略,而不进行提示。
您也可以在[SO]: Strange error while using Pycharm to debug PyQt gui (@CristiFati's answer)上找到更多详细信息。
因此,为了使 Python 能够在不指定路径的情况下加载模块(包),路径必须存在于 %PYTHONPATH% 环境变量中。
您在问题中多次提到 %PATH%,但它是***%PYTHONPATH%***(必须在其中添加 MyCode)。
如果您想让 CmdLine 的功能正常运作,您也必须在那里执行相同的动作:
相反,在 PyCharm 中(选中上面的 * 内容根 * 相关复选框),可以添加更多内容根,如下图所示(菜单:文件-〉设置...,选择 * 项目结构 *,然后选择 * 添加内容根 *):
当一些必需的模块位于项目树的更深处(并且一些 dir 不是有效的 Python 包名称)时,这很有用。
所以,在处理这类情况时,检查[python.docs]:系统路径,[Python文档]:os.getcwd()和模块路径,可以保存大量的时间和麻烦:
顺便说一句,我个人不喜欢以 My 开头的名字(例如 MyCode)。这样的名字告诉我,无论实体“穿”它的目的是什么,编写代码的人都不清楚。试着找一个更有用的名字(例如 TestBotProject,或 smth similar):)。
[SO]: PyCharm doesn't recognize installed module (@CristiFati's answer)也可能包含一些有用的信息。
nuypyhwy2#
Python使用系统变量
PYTHONPATH
来决定导入什么。从文档中:
当导入一个名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果没有找到,它将spam.py在变量sys.path.sys给出的目录列表中搜索名为www.example.com的文件。path是从以下位置初始化的:
PyCharm之所以在运行脚本时神奇地导入模块,是因为
Project Structure -> Content Root
值。默认情况下,它指向您的项目目录。qq24tv8q3#
检查您的解释器。它与命令提示符解释器不同,位于
Appdata
中,而PyCharm的解释器位于Workspace
文件夹中。bvhaajcl4#
在系统变量中设置Python路径,以便您可以从目录中的任何位置运行python -help,然后导航到项目文件夹
或
如果路径有空格,请尝试使用引号