Python项目跨目录导入函数时终端报错的解决办法求助
Python项目跨目录导入函数时终端报错的解决办法求助
兄弟我太懂你这种PyCharm里跑的好好的,一到终端就报模块找不到的坑了!其实核心原因是PyCharm默认会把你的项目根目录(也就是parentPackage所在的那个上级目录)自动加到Python的sys.path里,但终端运行的时候不会这么做,所以才会出现各种导入错误。给你几个实用的解决办法,你可以根据自己的需求选:
办法一:临时把项目根目录加到Python路径(快速应急)
在Windows命令行里,先切换到你要运行脚本的目录,然后先执行这条命令把项目根目录加入环境变量:
set PYTHONPATH=%PYTHONPATH%;C:\你的项目路径\parentPackage的上级目录路径
比如假设parentPackage在C:\Projects\MyPythonProj下面,那就是:
set PYTHONPATH=%PYTHONPATH%;C:\Projects\MyPythonProj
之后再运行你的file3.py,这时候用你最开始的绝对导入就没问题了:
from parentPackage.pack1.file1 import foo from file2 import foo2 # 同目录的导入直接写就行,或者用from .file2 import foo2更规范
如果你不想每次都手动设置环境变量,也可以在file3.py的最开头加上一段代码,动态把项目根目录加到sys.path里:
import sys from pathlib import Path # 获取当前文件的父级父级父目录(也就是parentPackage所在的目录) project_root = Path(__file__).parent.parent.parent sys.path.append(str(project_root)) # 之后正常导入 from parentPackage.pack1.file1 import foo from file2 import foo2
办法二:把项目安装成可编辑包(长期项目推荐)
如果这是个长期维护的项目,推荐把它做成一个可安装的Python包,用pip的可编辑模式安装,这样不管你在哪个目录运行脚本都能正常导入。
步骤如下:
- 在
parentPackage的上级目录(也就是包含parentPackage的那个文件夹)里创建一个setup.py文件,内容如下:
from setuptools import setup, find_packages setup( name="my_parent_package", # 随便起个包名 version="0.1.0", packages=find_packages(), # 自动找到所有子包 )
- 打开终端,切换到这个上级目录,运行命令:
pip install -e .
这个命令会把你的项目以“可编辑”模式安装到Python环境里,之后你就可以在任何地方用绝对导入了,和PyCharm里一样顺畅。
办法三:从项目根目录以模块方式运行脚本
还有一种更规范的方式,就是不要直接运行file3.py,而是从项目根目录(parentPackage的上级目录)用模块的方式运行:
python -m parentPackage.pack2.file3
这时候Python会自动把当前目录(项目根目录)加到sys.path里,你可以用绝对导入,也可以用相对导入(这时候相对导入就不会报“没有已知父包”的错误了):
from ..pack1.file1 import foo from .file2 import foo2
试试这几个办法,应该能解决你的问题!
备注:内容来源于stack exchange,提问作者AlexM_CS
相关产品推荐
相关产品推荐

