从另一个目录导入类

时间:2017-02-11 03:16:12

标签: python import python-import

我有:

script1.py in database/table_inserts/  #trying to import below file into
dbcrud.py in database/                 #trying to import by above file

script1.py我有:

from ..dbcrud import set_db_setting

但这会引发错误:

   from ..dbcrud import set_db_setting
SystemError: Parent module '' not loaded, cannot perform relative import

我做错了什么?

1 个答案:

答案 0 :(得分:2)

修改

感谢@Mad Physicist条评论。

解决问题最简单,最简单的方法是在__init__.py文件夹中添加一个空database/文件,在__init__.py文件夹中添加另一个空database/table_inserts/文件,以便被认可为一揽子计划。

请参阅此层次结构示例:

database/
├── dbcrud.py
├── __init__.py
└── table_inserts
    ├── __init__.py
    └── script1.py

1 directory, 4 files

然后您在script1.py所要做的就是从dbcrud.py导入您的模块,如下例所示:

# Note here the double dots '..'
from ..dbcrud import you_module

否则,如果您想要其他解决方案,可以像这样编辑$PYTHONPATH变量:

<强> dbcrud.py:

class DBCrud:
    def __init__(self):
        print("I'm DBCrud'")

<强> script1.py

# Add the parent directory to your module
# by using this kind of hack
import os, sys
sys.path.insert(1, os.path.join(sys.path[0], '..'))
# Then import your module
from dbcrud import DBCrud

class Script1:
    def __init__(self):
        print("I'm Script1'")
        DBCrud.__init__(self)

# test
if __name__ == '__main__':
    app = Script1()

现在,您可以从database/文件夹或database/table_insers/文件夹运行测试示例:

~$ pwd
/user/path/database/table_inserts
~$ python3 script1.py

输出:

I'm Script1'
I'm DBCrud'

~$ pwd
/user/path/database
~$ python3 table_inserts/script1.py

输出:

I'm Script1'
I'm DBCrud'