3 回答
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
TA贡献1853条经验 获得超6个赞
来自[Python 3.Docs]:命令行和环境 - 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添加到其中)。
PyCharm这样做是因为下图中的(任何)2 个复选框:
如果你想从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
作为旁注,我个人讨厌以My开头的名称(例如MyCode)。请试着寻找更为有用的名称(例如TestBotProject,或不便类似):)。
![?](http://img1.sycdn.imooc.com/533e4d5b0001d57502200203-100-100.jpg)
TA贡献1757条经验 获得超7个赞
Python 使用系统变量PYTHONPATH
等来决定要导入的内容。
从文档:
当导入名为 spam 的模块时,解释器首先搜索具有该名称的内置模块。如果未找到,它将在变量 sys.path 给出的目录列表中搜索名为 spam.py 的文件。sys.path 从这些位置初始化:
包含输入脚本的目录(或未指定文件时的当前目录)。
PYTHONPATH(目录名称列表,与 shell 变量 PATH 具有相同的语法)。
依赖于安装的默认值。
PyCharm 在您运行脚本时神奇地导入模块的原因是因为Project Structure -> Content Root
值。默认情况下,它指向您的项目目录。
添加回答
举报