Python子包导入父包模块问题:PyCharm可运行CMD报错
Python包导入:PyCharm能运行但CMD不行?看这篇就懂
我来帮你理清这个问题——你遇到的核心困惑其实是系统%PATH%和Python模块搜索路径sys.path的区别,这俩完全不是一回事儿!
为什么PyCharm能正常运行?
PyCharm作为专业的Python IDE,会自动帮你做一件事:把你的项目根目录(也就是C:\script\test)添加到Python的sys.path列表里。sys.path是Python用来查找模块/包的专属路径列表,所以PyCharm能轻松找到parent包,自然能成功导入testfunc。
为什么CMD里加%PATH%没用?
你把C:\script\test加到系统的%PATH%里,这只是告诉Windows:“如果我输入一个命令找不到可执行文件,去这个目录里找找看”。但Python的模块搜索逻辑根本不看%PATH%,它只认自己的sys.path。所以你加了%PATH%等于白忙活,Python还是找不到parent包。
解决方法(按优先级推荐)
1. 最规范的做法:把项目安装为可编辑包
这种方法一劳永逸,不管你在哪个终端运行脚本都能导入包:
- 在
C:\script\test目录下创建一个setup.py文件,内容如下:from setuptools import setup, find_packages setup( name="parent", version="0.1", packages=find_packages() ) - 打开CMD,进入
C:\script\test目录,运行命令:
这个命令会把你的pip install -e .parent包以“可编辑模式”安装到Python的site-packages里,之后不管你在哪运行脚本,都能直接from parent import testfunc。
2. 永久配置Python模块搜索路径
把项目根目录加到PYTHONPATH环境变量里(这才是Python认的路径):
- 右键「此电脑」→「属性」→「高级系统设置」→「环境变量」
- 点击「新建」系统变量,变量名填
PYTHONPATH,变量值填C:\script\test - 重启CMD,之后再运行你的脚本就没问题了
3. 临时解决方案(单次会话生效)
如果你只是临时测试,不想改环境变量,可以在CMD里先设置PYTHONPATH再运行脚本:
set PYTHONPATH=C:\script\test python parent/sub/subsub/testsubsub.py
或者在testsubsub.py开头手动添加路径(适合脚本独立运行的场景):
import sys from pathlib import Path # 从当前脚本路径往上回溯到项目根目录(C:\script\test) project_root = Path(__file__).parent.parent.parent.parent sys.path.append(str(project_root)) from parent import testfunc print(testfunc.return_2())
这里的parent.parent.parent.parent是因为你的testsubsub.py在parent/sub/subsub目录下,需要往上退4层才能到C:\script\test,你可以根据实际路径调整层级。
内容的提问来源于stack exchange,提问作者Panupat
相关产品推荐
相关产品推荐

