You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何从不同包导入类到当前包?带空格包名导入报错如何解决?

跨包导入操作的正确实现方案

问题根源

你遇到的报错核心有两个原因:

  • Python的包名、模块名必须符合标识符命名规范,仅允许包含字母、数字、下划线,不能包含空格、特殊字符,你创建的Classes in python包名带空格,本身就不符合Python的包命名规则
  • 你写的import classes in python.MyDate语句里包含空格,会被Python语法解析器识别为多个独立的标识符,直接触发语法错误

最优解决步骤

第一步:修正包命名

将带空格的Classes in python包重命名为下划线分隔的合法包名,比如classes_in_python,这是最省事、兼容性最高的方案,可以避免后续各种奇怪的导入问题。

第二步:配置项目路径

确保你的项目结构符合以下规范:

项目根目录/
├── classes_in_python/
│   ├── __init__.py  # 空文件即可,Python3.3+非强制但建议添加,明确标记为Python包
│   └── MyDate.py  # 你的MyDate类定义在这个文件中
└── 独立调用包/
    ├── __init__.py
    └── 调用代码文件.py

在PyCharm中右键点击项目根目录,依次选择Mark Directory as → Sources Root,PyCharm会自动将根目录加入Python模块搜索路径,避免找不到模块的报错。

第三步:正确编写导入语句

根据MyDate类的存放位置,选择对应的导入写法:

  • 如果MyDate类定义在classes_in_python/MyDate.py文件中:
    • 直接导入类:from classes_in_python.MyDate import MyDate,使用时直接调用MyDate()即可
    • 导入模块后调用:import classes_in_python.MyDate as md,使用时调用md.MyDate()
  • 如果MyDate类直接定义在classes_in_python/__init__.py中:
    • 直接写from classes_in_python import MyDate即可

特殊临时方案(不推荐生产环境使用)

如果确实不想修改带空格的包名,可以用importlib模块动态导入:

import importlib
# 动态导入带空格的包下的模块
mydate_module = importlib.import_module("Classes in python.MyDate")
# 从模块中获取MyDate类
MyDate = getattr(mydate_module, "MyDate")

该写法可读性、兼容性都很差,仅作为临时测试使用,不建议正式项目中使用。

内容的提问来源于stack exchange,提问作者Arkadyuti Das

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 15:36:03