python - import无法导入该脚本的父目录下的另一个包的模块
PHP中文网
PHP中文网 2017-04-17 17:32:01
0
3
356

请原谅我问的问题这么肤浅,但是我已经搜索了很多资料,花了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讲师

membalas semua(3)
小葫芦

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

Jadi anda boleh kembali ke 上级目录 rootdir, dan kemudian laksanakannya dengan parameter -m:

python -m rootdir.scripts.script_of_folder_process
刘奇

Anda boleh menambah direktori induk pada sys.path.

小葫芦

Nampaknya terdapat perbincangan tentang ralat ini dalam isu 18018. Penyelesaiannya ada di sini, tetapi saya tidak tahu cara menggunakannya... Jika sesiapa tahu, sila beritahu saya~

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan