python - import无法导入该脚本的父目录下的另一个包的模块
PHP中文网
PHP中文网 2017-04-17 17:32:01
[Python讨论组]

请原谅我问的问题这么肤浅,但是我已经搜索了很多资料,花了2个小时依然找不到症结所在,所以只能提问了

环境windows10+python3.4.4

先把目录组织给出来

  • rootdir

    • libraries

      • __init__.py

      • classes.py

      • configs.py

      • functions.py

    • scripts

      • __init__.py

      • script_of_folder_process.py

    • __init__.py

上面有三个包,一个是rootdir,剩余两个scripts和libraries是rootdir的子包

现在我希望能够在script_of_folder_process.py引用libraries内的classesconfigs模块,其中classes内有我自己写的一个Mysql类,import代码如下:

import os
import os.path
import time
from ..libraries.classes import Mysql
from ..libraries.configs import DIR_MYSQL_CFG, FOLDER_MATCH_LOG_DIR

很遗憾的是出现了如下错误:

Traceback (most recent call last):
  File "E:\workspace\Auto_Project_Manage_System\scripts\script_of_folder_process.py", line 13, in <module>
    from ..libraries.classes import Mysql
SystemError: Parent module '' not loaded, cannot perform relative import

因此我测试了一下,即使改变了import,也依然无法访问到这两个模块

import os
import os.path
import time
from ..libraries import classes
from ..libraries import configs

错误如下:

Traceback (most recent call last):
  File "E:\workspace\Auto_Project_Manage_System\scripts\script_of_folder_process.py", line 13, in <module>
    from ..libraries import classes
SystemError: Parent module '' not loaded, cannot perform relative import

但是我若是将script_of_folder_process.py改变位置,放在rootdir下,即:

  • rootdir

    • libraries

      • __init__.py

      • classes.py

      • configs.py

      • functions.py

    • scripts

      • __init__.py

    • __init__.py

    • script_of_folder_process.py

并改变import为这样:

import os
import os.path
import time
from libraries.classes import Mysql
from libraries.configs import DIR_MYSQL_CFG,FOLDER_MATCH_LOG_DIR

代码便能正常运行,请问我的问题到底出在哪里?怎样才能访问父目录下的另一个包的模块?

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(3)
高洛峰

参考:http://stackoverflow.com/questions/14132789/python-relative-imports-for-the-billionth-time#answer-14132912

所以你可以返回到rootdir的上级目录, 然后用-m参数执行就可以了:

python -m rootdir.scripts.script_of_folder_process
怪我咯

可以将父目录添加到 sys.path 里。

高洛峰

在issue 18018里面好像是关于这个错误的讨论,解决方案在这里,但是我不知道怎么用……如果有谁知道请告诉我一声~

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号