2015-08-14 3 views
0

Я работаю над скриптом python, который потребует импорта нескольких библиотек.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 

ответ

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 будет импорт.


EDIT: Может быть, я missunderstand вопрос: вот несколько способов импортировать функцию 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() 
+0

Это очень тщательный ответ, который является большим.Ваш первый ответ - это тот, который я искал для массового импорта небольших библиотечных функций. – Trent

1

В вашем случае library01 является модуль который содержит функцию по названию library01. Вы импортируете модуль library01 и пытаетесь вызвать его как функцию. Это проблема. Вы должны вызвать функцию следующим образом:

library01.library01() 
+0

Это, безусловно, решение, но похоже, что оно бесполезно использовать имя файла, а также имя функции, учитывая, что, возможно, будут сотни из них, но это определенно будет полезно для импорта больших скриптов. Огромное спасибо – Trent

Смежные вопросы