Python导入多个脚本

时间:2015-08-14 07:22:29

标签: python debugging module

我一直在研究一个需要导入多个库的python脚本。

目前我的目录结构是

program/
    main.py
    libs/
        __init__.py
        dbconnect.py
        library01.py
        library02.py
        library03.py

我的dbconnect.py包含以下内容

import psycopg2

class dbconnect:

    def __init__(self):
        self.var_parameters = "host='localhost' dbname='devdb' user='temp' password='temp'"

    def pgsql(self):
        try:
            var_pgsqlConn = psycopg2.connect(self.var_parameters)
        except:
            print("connection failed")

    return var_pgsqlConn

我可以使用

在main.py中导入和使用它
from libs.dbconnect import dbconnect

class_dbconnect = dbconnect()
var_pgsqlConn = class_dbconnect.pgsql()

这按预期工作但是我试图导入所有具有相似内容的库脚本,如下所示

def library01():
    print("empty for now but this is library 01")

我已添加到我的__init__.py脚本

__all__ = ["library01", "library02"]

然后在我的main.py中,我尝试导入并将它们用作下面的文件

from libs import *

library01()

我收到以下错误

TypeError: 'module' object is not callable

2 个答案:

答案 0 :(得分:1)

我假设你的library0x.py中的内容不同(函数/类有不同的名称)

最好的方法是在__init__.py

中导入所有子文件内容
# __init__.py
from .dbconnect import *
from .library01 import *
from .library02 import *
from .library03 import *

然后您可以使用以下内容:

from libs import library01, library02

如果由于某些原因限制在library0x.py文件中使用通配符(*)进行导入,则可以定义一个__all__变量,其中包含要导入的函数的所有名称通配符:

# library01.py

__all__ = ["library01"]

def a_local_function():
    print "Local !"

def library01():
    print "My library function"

然后,通过执行from .library01 import *,只会导入函数library01

编辑:也许我很想念这个问题:这里有一些方法可以在文件library01中导入函数library01.py

# Example 1:
from libs.library01 import library01
library01()

# Example 2:
import libs.library01
libs.library01.library01()

# Example 3:
import libs.library01 as library01
library01.library01()

答案 1 :(得分:1)

在您的情况下,library01模块,其中包含名为library01函数。您导入library01模块并尝试将其作为函数调用。那就是问题所在。你应该像这样调用函数:

library01.library01()