Python包内导入同包文件报语法错误的正确导入方法
问题原因
你触发语法错误的核心原因是Python相对导入的语法规则不支持import .xxx的写法:.开头的相对模块路径必须搭配from ... import ...结构使用,直接在import关键字后写点开头的模块名属于非法语法,解释器会直接在.位置抛出语法错误。
正确实现方法
1. 修正导入语句
在__main__.py中导入同包的cli.py,正确写法如下:
# 导入整个cli模块,别名设为clifunc from . import cli as clifunc # 如果只需要导入cli.py内的指定函数(比如叫run的函数),写法为 # from .cli import run as clifunc
2. 规避"文件不是模块"报错的注意事项
- 运行方式必须用
python3 -m pkg,不要直接执行python3 pkg/__main__.py:直接运行单文件脚本时,解释器会把该文件识别为顶层脚本,不属于pkg包的层级结构,相对导入会直接失效。 - 安装包时必须在项目根目录(即存放
setup.py的目录)执行pip install .,如果是开发阶段调试,推荐用pip install -e .做可编辑模式安装,修改包内代码后不需要重复重装。 - 确认包内文件不要和Python标准库、已安装第三方包重名,否则会出现模块名冲突导致识别失败。
3. 验证流程
按上述步骤修正后,在项目根目录依次执行以下命令即可正常运行:
pip install -e . python3 -m pkg
补充:如果需要做跨层级的包内导入,比如子目录下的模块导入上层目录的内容,只需要增加点的数量即可:一个
.代表当前目录,两个..代表上一级目录,以此类推。
内容的提问来源于stack exchange,提问作者peterthor1
相关产品推荐
相关产品推荐

