Flask: импорт пользовательских функций в API - PullRequest
0 голосов
/ 27 ноября 2018

Я родом из R и пытаюсь разработать API на Python, используя Flask.Моя папка выглядит примерно так:

project
--server.py
--custom_functions
----func1.py
----func2.py
--more_custom_functions
----subfolder1
------func3.py
------func4.py
----subfolder2
------func5.py
------func6.py

Я предпочитаю организовывать свои пользовательские функции в разные подпапки в зависимости от их назначения, так что custom_functions могут быть, например, функциями, связанными с очисткой и так далее.В идеале, когда я запускаю server.py, используя (в Windows CMD, если это помогает)

python server.py 

в каталоге / проекте, я хотел бы иметь возможность импортировать каждую функцию.Функция выглядит как

import numpy as np 
def func1 (x) : 
     return(x + 1) 

и ничего более.

У меня такой вопрос: как при инициализации сервера (т.е. при python server.py) импортировать каждый отдельный модуль (например, numpy / pandas ) глобально, такчто все подфункции могут использовать эти модули без вызова импорта внутри них, т.е. (в приведенном выше примере мы можем удалить import numpy as np) и импортировать все функции func1, func2, ..., func6?Я не против, если я буду называть их как custom_functions.func1 или more_custom_functions.subfolder1.func3, скажем, при необходимости.

Я пробовал несколько вещей, таких как добавление __init__.py в некоторые папки и добавление __all__ = ["func1", "func2"] в этот файл (а также оставление его пустым).Я также попробовал

import sys, os
sys.path.append(os.getcwd() + '\\custom_functions') 
import custom_functions 

и варианты этого типа из импорта custom_functions *, но все безрезультатно.

Некоторые ошибки, которые я получаю, включают:

module 'custom_functions' has no attribute func1 или
name 'custom_functions' is not defined.

В R я бы использовал что-то вроде source(dir, recursive=TRUE, pattern="*.R"), а затем библиотеку / требовал все пакеты в самом начале кода, и все хорошо.Есть ли простой эквивалент?Или мне нужно переместить каждую функцию в один файл (скажем, functions.py ) и затем импортировать функции?

Спасибо за любую помощь.

1 Ответ

0 голосов
/ 28 ноября 2018

Похоже, что существует промежуточное решение, которое более или менее соответствует моим потребностям, даже если это не лучший метод для Python.

import os
import glob
files_names = glob.glob(os.getcwd() + '\custom_functions\**\*.py')
for f in file_names : exec(open(f).read())

Это позволяет мне использовать пользовательские функциибез необходимости называть их модулями, т.е. я могу использовать их как

func1()

вместо

custom_functions.func1()
...