Python 3.5 自定义io包导入失败问题求助
解决Python 3.5中自定义
io文件夹导入冲突的问题 嘿,这个问题我之前踩过坑!原因其实很直白:Python 3的标准库自带了一个核心模块叫io,和你自己创建的io文件夹重名了。当你尝试import io.foo时,Python会优先加载标准库的io模块——而这个模块根本不是包含foo子模块的包,自然就抛出了那个错误。
给你几个可行的解决方案:
1. 重命名自定义的io文件夹(最推荐)
这是最省心的办法,直接把你的io文件夹改成别的名字,比如my_io或者app_io。修改后你的结构变成:
/main main.py /my_io __init__.py foo.py
然后在main.py里改成:
import my_io.foo # 或者 from my_io.foo import *
这样完全避开了和标准库的命名冲突,不会再出问题。
2. 调整模块搜索优先级(不想改名的话)
如果你不想改文件夹名字,可以手动把当前脚本所在目录放到Python模块搜索路径的最前面,让它优先找到你的本地io文件夹。在main.py的最开头加上这段代码:
import sys # 把当前目录插入到搜索路径的第一个位置 sys.path.insert(0, '.') import io.foo
3. 使用相对导入(适合项目作为包运行的场景)
你也可以用Python的相对导入语法,在main.py里这样写:
from .io.foo import *
但要注意,这种方式需要你把整个项目当作一个包来运行,不能直接用python main.py,而是要在项目的上级目录执行:
python -m main
这样Python会把当前目录识别为一个包,相对导入就能正常工作了。
为什么Python 2.7没问题?
Python 2.7的标准库虽然也有io模块,但当时的模块搜索路径规则和Python 3有差异,而且Python 2对包的识别逻辑也更宽松,所以没触发这个命名冲突。
内容的提问来源于stack exchange,提问作者Torilla




