我一直在研究一个需要导入多个库的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
答案 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()