#python #pip #python-requests
#python #pip #python-запросы
Вопрос:
У меня есть код для AWS Lambda, и дерево файлов выглядит примерно так:
/.
/..
/Class1.py
/Class2.py
/Class3.py
/libs
/module1
/module2
/module3
Одним из модулей в libs
каталоге являются запросы, которые имеют относительный импорт в __init.py__
для другого модуля, который хранится в том же подкаталоге. К сожалению, Python3 ищет этот модуль в sys.path
Установка в pip3 с флагом --install-option=--prefix=./libs
не работает (в libs
каталоге отображается только dist-информация.
Как с этим бороться?
Ответ №1:
Установите ваши зависимости в виртуальную среду с помощью pip
, затем создайте zip-файл, содержащий эту виртуальную среду и код вашей функции, и загрузите его в AWS Lambda. Вы можете найти подробные инструкции о том, как это сделать здесь.
Комментарии:
1. Похоже, что на данный момент это работает — еще не загружено в AWS. Спасибо!
2. Если этот ответ был вам полезен, пожалуйста, используйте зеленую галочку, чтобы пометить его как «принятый ответ» на этот вопрос. Это сигнализирует будущим читателям, что решение сработало и может сработать и для них.
Ответ №2:
Вы можете попробовать добавить в sys.path.
Предположим, что module1, следует импортировать module2.
Чем в module1.init.py:
import os
abspath = os.path.abspath
join = os.path.join
lib_path = abspath(join(dirname(abspath(__file__)), ".."))
sys.path.append(lib_path)
import module2
Или вы можете попробовать использовать модуль imp:
import imp
import os
abspath = os.path.abspath
join = os.path.join
lib_path = abspath(join(dirname(abspath(__file__)), ".."))
(_file, _filename, (_suffix, _mode, _type)) = imp.find_module(
"module2",
[lib_path])
module2 = imp.load_module("module2", _file, _filename, (_suffix, _mode, _type))
Я не запускаю его, предполагая, что это может помочь.
Комментарии:
1. Будет ли это работать после обновления модуля? И что каким-то образом в будущем Class1 импортирует и создаст экземпляр Class2? Будет ли это также работать?
2. Я думаю, да, если будут сохранены относительные пути.