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可能还包含一些有用的信息。