На данный момент есть только две опции:
- Использование
requirements.txt
- Упаковка зависимостей вместе с вашей функцией, ссылка здесь
Они не могут быть заархивированы ни в хранилище, они будут рассматриваться как часть источника функции.
Если вы выберете второй вариант, параметр -t libs
можетпомочь тебе.Вы можете использовать его для установки всего в папку libs
, а затем просто переместить содержимое в локальный каталог.Как одна команда это выглядело бы так:
pip install -t libs [your library name(s)] && rm -rf libs/*.dist-info && mv -r libs/* . && rm -rf libs
Я добавил часть rm -rf libs/*.dist-info
, чтобы не загрязнять исходную папку тоннами версии библиотеки и информации о распространении, которые бесполезны для функции.Они используются pip
при замораживании и планировании обновлений.
РЕДАКТИРОВАТЬ 6/14/2019
Вы хранили библиотеки в папке libs
.Это точка до mv -r libs/* .
на однострочнике, который я добавил выше.
Использование папки libs
сохраняет все более упорядоченным, поэтому, если вы хотите сохранить пакеты там, вам нужнопапка, добавляющая это в верхнюю часть вашего main.py
, перед всеми другими импортами:
# Vendoring packages from libs folder
import sys
import os
sys.path.insert(1, os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"libs"
))
# All other imports go below this line
Объяснение:
__file__
- глобальная переменная, присутствующая в каждом модуле, который содержит путь кфайл, из которого был определен модуль, то есть файл, в котором он используется.В нашем случае путь к main.py
.
Поскольку мы не можем быть уверены в рабочем каталоге в момент импорта main.py
, мы передаем его в os.path.realpath
, чтобы быть уверенным в структуре пути.Может быть os.path.abspath
to, я видел и использовал оба, и не заметил никакой разницы.
Из пути к файлу мы получаем путь к каталогу вашего исходного кода с os.path.dirname
изатем в папку libs
внутри нее с os.path.join
.
Теперь самая важная часть.Когда вы пытаетесь импортировать пакет, python ищет их по пути system / python.Поэтому мы добавляем полный путь libs
, который мы создали, в качестве первого местоположения поиска по системному пути после вашего рабочего каталога .Новые операторы импорта будут сначала искать эту папку, а пакет там не будет, как обычно, продолжайте работу с остальными каталогами поиска.
Если вы предпочитаете искать пакеты в библиотеках, только если они недоступны в системе и среде python, добавьте путь libs
вместо того, чтобы вставлять его в индекс 1.
После этого вам не нужно вводить libs.
при импорте, просто используйте обычный import numpy
.
В полностью независимых пакетах это может работать, но не в пакетах с зависимостями, поскольку они ожидают, что их зависимости будут импортироваться напрямую (из любой точки sys.path
).