相对导入中Attempted relative import in non-package问题

本文详细解释了Python中遇到的相对导入问题,特别是在顶层模块尝试使用相对导入时出现的错误。文章提供了两种解决方案:一是将运行脚本重命名为__main__.py并在包外部运行;二是创建一个新的脚本文件来导入包内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这一篇应该是解释的比较清楚:

http://stackoverflow.com/questions/14664313/attempted-relative-import-in-non-package-although-packages-with-init-py-in

 

关键点是: 顶层的module运行时, 不能用相对导入, 即使顶层有init文件也不行.  因运行文件也在顶层, 看不到init的作用.

 

 

问题原因

不能在一个包里运行一个脚本文件,顶层的脚本文件不能用相对导入。
如果要将一个包作为一个脚本运行的话,需要将运行的脚本文件更名为__main__.py,然后再该包文件夹外运行该包的命令:

python -m testpackage

还有一种解决办法是在包外创建一个脚本文件,然后将包的内容导入到该脚本中。

 

参见:

http://blog.jasonding.top/2015/02/03/Python/%E3%80%90python%E3%80%91%E7%9B%B8%E5%AF%B9%E5%AF%BC%E5%85%A5%E4%B8%ADAttempted-relative-import-in-non-package%E9%97%AE%E9%A2%98/

 

这总是一个很麻烦的问题, 和pycharm的版本也有关系. 看来python在这一块做的不是很好.  碰到过相关问题很多次了. 

 

转载于:https://www.cnblogs.com/qingyuanjushi/p/6400067.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值