Как добавить префикс к модулю pip3 из относительного пути

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