Облачные функции Google (GCF) - установка пакетов С помощью apt-get

Мне нужно 2 пакета для моих функций облачных функций Google (GCF) для правильной работы. Обычно я устанавливаю их с помощью следующей команды на Ubuntu:

apt-get -y install firefox xvfb

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

Я попытался установить их из моей функции Python, используя subprocess.call () .

Вот какой код:

try:
    print(subprocess.check_output("apt-get -y install firefox", shell=True, stderr=subprocess.STDOUT))
except subprocess.CalledProcessError as e:
    print("Ping stdout output:
", e.output)

try:
    print(subprocess.check_output("apt-get -y install xvfb", shell=True, stderr=subprocess.STDOUT))
except subprocess.CalledProcessError as e:
    print("Ping stdout output:
", e.output)

К сожалению, это не работает. Я получаю следующие ошибки:

Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
 libcanberra0 libdbusmenu-gtk3-4 libstartup-notification0 libtdb1
 libxcb-util1 sound-theme-freedesktop xul-ext-ubufox
Suggested packages:
 fonts-lyx libcanberra-gtk0 libcanberra-pulse
The following NEW packages will be installed: firefox
 libcanberra0 libdbusmenu-gtk3-4 libstartup-notification0 libtdb1
 libxcb-util1 sound-theme-freedesktop xul-ext-ubufox
0 upgraded, 8 newly installed, 0 to remove and 5 not upgraded.
Need to get 44.5 MB of archives.
After this operation, 170 MB of additional disk space will be used.
W: Not using locking for read only lock file /var/lib/dpkg/lock
W: chown to _apt:root of directory /var/cache/apt/archives/partial failed - SetupAPTPartialDirectory (30: Read-only file system)
W: chmod 0700 of directory /var/cache/apt/archives/partial failed - SetupAPTPartialDirectory (1: Operation not permitted)
W: chown to _apt:root of directory /var/lib/apt/lists/auxfiles failed - SetupAPTPartialDirectory (30: Read-only file system)
W: chmod 0700 of directory /var/lib/apt/lists/auxfiles failed - SetupAPTPartialDirectory (1: Operation not permitted)
W: Not using locking for read only lock file /var/cache/apt/archives/lock
E: Couldn't determine free space in /var/cache/apt/archives/ - statvfs (38: Function not implemented)

Как я могу исправить эту ошибку, чтобы загрузить пакеты из моего кода на Python? Есть ли другой (более простой / чистый) способ достичь того, что я пытаюсь сделать?

Благодаря!

python-3.x,firefox,google-cloud-platform,google-cloud-functions,xvfb,

1

Ответов: 4


1 принят

Вы не можете организовать установку пакетов в экземплярах облачных функций. Это связано с тем, что ваш код не запускается с правами root. Если вам нужны бинарные файлы для вашего кода, развернутого в Cloud Functions, вам придется самостоятельно его создать для Debian и включить двоичные файлы в свой каталог функций, чтобы он развернулся вместе с остальной частью вашего кода.

Даже если вы в состоянии это сделать, нет никакой гарантии, что он будет работать, потому что изображения Cloud Fucntions могут не включать все разделяемые библиотеки, необходимые для работы исполняемых файлов.


0

Вы не можете устанавливать пакеты, но можете использовать кукольник вместо xvfb. https://cloud.google.com/blog/products/gcp/introducing-headless-chrome-support-in-cloud-functions-and-app-engine


0

Не прямой ответ на ваш вопрос, но похоже, что вы пытаетесь использовать безгласный браузер внутри GCF. Вероятно, стоит упомянуть, что теперь безглавой Chrome теперь поддерживается в облачных функциях, что может быть проще в использовании, если вы сможете перейти от Firefox к Chrome:

https://cloud.google.com/blog/products/gcp/introducing-headless-chrome-support-in-cloud-functions-and-app-engine


0

Вы можете запросить добавление новых пакетов во время выполнения с помощью общедоступного трекера . Обратите внимание, что трекер ошибок говорит «App Engine», но просто упомяните, что это для облачных функций.

питон-3.x, Firefox, Google-облако платформы, Google-облачные функции, Xvfb,