Невозможно установить cvxpy в virtualenv для AWS lambda - PullRequest
0 голосов
/ 31 октября 2019

Я пытаюсь запустить пакет cvxpy в лямбда-функции AWS. Этот пакет отсутствует в SDK, поэтому я прочитал, что мне придется скомпилировать зависимости в zip, а затем загрузить zip в функцию lambda.

Я провел некоторые исследования иопробовал ссылки ниже, но когда я пытаюсь установить pv install cvxpy, я получаю сообщения об ошибках - я нахожусь на коробке Windows, но я знаю, что AWS Lambda работает на Linux.

Благодарю за помощь!

http://i -systems.github.io / HSE545 / machine% 20 обучение% 20all / cvxpy_install / CVXPY% 2BУстановка% 2BGuide% 2Bfor% 2BWindows.html

https://programwithus.com/learn-to-code/Pip-and-virtualenv-on-Windows/

https://medium.com/@manivannan_data/import-custom-python-packages-on-aws-lambda-function-5fbac36b40f8

https://www.cvxpy.org/install/index.html

ОБНОВЛЕНИЕ :: Ниже приведен вывод ошибки, когда я пытался выполнить ответ ниже

pip install cvxpy-t alley / python / lib / python2.7 / site-packages Сбор cvxpy с использованием cached https://files.pythonhosted.org/packages/d9/ed/90e0a13ad7ac4e7cdc2aeaefed26cebb4922f205bb778199268863fa2fbe/cvxpy-1.0.25.tar.gz ОШИБКА: команда завершилась ошибкой с состоянием выхода 1: команда: / usr / bin / python3 -c 'import sys, setuptoolsтокенизировать;sys.argv [0] = '"'" '/tmp/pip-install-r_5oawmm/cvxpy/setup.py' "'"'; file = '"'" '/ tmp / pip-install-r_5oawmm / cvxpy / setup.py' "'"'; f = getattr (tokenize, '"'" 'open' "'"', открыть) ( файл ); code = f.read (). replace ('"'" '\ r \ n' "'"', '"'" '\ n' "'"'); f.close (); exec (скомпилировать (код, file , '"' 'exec'" '"')) 'egg_info --egg-base / tmp / pip-install-r_5oawmm/ cvxpy / pip-egg-info cwd: / tmp / pip-install-r_5oawmm / cvxpy / полный вывод (171 строка): / bin / sh: svnversion: команда не нашла несуществующий путь в 'numpy / distutils': 'site.cfg 'Не удалось найти исполняемый файл gfortran Не удалось найти исполняемый файл f95 Не удалось найти исполняемый файл ifort Не удалось найти исполняемый файл ifc Не удалось найти исполняемый файл lf95 Не удалось найти исполняемый файл pgfortran Не удалось найти исполняемый файл f90 Не удалось найти исполняемый файл f77 Не удалось найти исполняемый файл Fort Couldне найти исполняемый файл efort Не удалось найти исполняемый файл efc Не удалось найти исполняемый файл g77 Не удалось найти исполняемый файл g95 Не удалось найти исполняемый путьf95 Не удалось найти исполняемый файл nagfor Не знаю, как скомпилировать ДляТран код на платформе posix Запуск из исходного каталога. /tmp/easy_install-z9uvzst7/numpy-1.17.4/setup.py:419: UserWarning: нераспознанная команда setuptools, продолжающая генерацию исходников Cython и расширение шаблонов run_build = parse_setuppy_commands () /usr/lib64/python3.6/distutils/dist.py: 261: UserWarning: неизвестный параметр распространения: 'project_urls' warnings.warn (msg) /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/system_info.py:690: UserWarning: оптимизированный (поставщик) Blasбиблиотеки не найдены. Возвращается к библиотеке netlib Blas, которая имеет худшую производительность. Лучшая производительность должна быть легко достигнута путем переключения библиотеки Blas. self.calc_info () /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/system_info.py:690: UserWarning: библиотеки Blas (http://www.netlib.org/blas/) не найдены. Каталоги для поиска библиотек могут бытьуказывается в файле numpy / distutils / site.cfg (раздел [blas]) или путем установки переменной среды BLAS. self.calc_info () /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/system_info.py: 690: UserWarning: Blas (http://www.netlib.org/blas/) источники не найдены. Каталоги для поиска источников можно указать в файле numpy / distutils / site.cfg (раздел [blas_src]) или установив переменную среды BLAS_SRC. self.calc_info () /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/system_info.py:1712: UserWarning: Lapack (http://www.netlib.org/lapack/) библиотеки не найдены. Каталоги для поиска библиотек могут бытьуказывается в файле numpy / distutils / site.cfg (раздел [lapack]) или путем установки переменной среды LAPACK. if getattr (self, '_calc_info _ {}'. format (lapack)) ():/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/system_info.py:1712: UserWarning: Lapack (http://www.netlib.org/lapack/) источники не найдены. Каталоги для поиска источников можно указать в numpy /файл distutils / site.cfg (раздел [lapack_src]) или путем установки переменной среды LAPACK_SRC. if getattr (self, '_calc_info _ {}'. format (lapack)) (): /usr/lib64/python3.6/distutils/dist.py:261: UserWarning: неизвестный параметр распространения: 'project_urls' warnings.warn (msg) /usr/lib64/python3.6/distutils/dist.py:261: UserWarning: неизвестный параметр распространения: 'define_macros' warnings.warn(msg) трассировка (последний вызов был последним): файл "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", строка 158, в save_modules возвращает сохраненный файл "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py ", строка 199, в файле setup_context yield. Файл" /usr/lib/python3.6/dist-packages/setuptools/sandbox.py ", строка 254, в файле _execfile run_setup (setup_script, ns) Файл "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 49, в файле _execfile exec (код, глобальные переменные, локальные файлы) Файл "/tmp/easy_install-z9uvzst7/numpy-1.17.4/setup.py", строка 444, в файле "/tmp/easy_install-z9uvzst7/numpy-1.17. 4 / setup.py ", строка 436, в файле setup_package" /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/core.py ", строка 171, в файле настройки" / usr / lib64 / python3. 6 / distutils / core.py ", строка 148, в файле установки dist.run_commands ()" "/usr/lib64/python3.6/distutils/dist.py", строка 955, в файле run_commands self.run_command (cmd) File "/usr/lib64/python3.6/distutils/dist.py ", строка 974, в файле run_command cmd_obj.run ()" /usr/lib/python3.6/dist-packages/setuptools/command/bdist_egg.py ",строка 152, в файле запуска self.run_command ("egg_info") "/usr/lib64/python3.6/distutils/cmd.py", строка 313, в файле run_command self.distribution.run_command (команда) "/ usr / lib64/python3.6/distutils/dist.py ", строка 974, в файле run_command cmd_obj.run ()" /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/egg_info.py ", строка 26, в файле запуска "/ usr / lib64 / python3. 6 / distutils / cmd.py ", строка 313, в файле run_command self.distribution.run_command (команда) Файл" /usr/lib64/python3.6/distutils/dist.py ", строка 974, в файле run_command cmd_obj.run ()Файл "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/build_src.py", строка 142, в рабочем файле "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command / build_src.py ", строка 153, в файле build_sources" /tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/build_src.py ", строка 286, в файле build_library_sources" / tmp / easy_install-z9uvzst7 / numpy-1.17.4 / numpy / distutils / command / build_src.py ", строка 369, в файле generate_sources" numpy / core / setup.py ", строка 669, в get_mathlib_info RuntimeError: неработающая цепочка инструментов: невозможно связать простой Cпрограмма

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/tmp/pip-install-r_5oawmm/cvxpy/setup.py", line 76, in <module>
    use_2to3=True,
  File "/usr/lib64/python3.6/distutils/core.py", line 108, in setup
    _setup_distribution = dist = klass(attrs)
  File "/usr/lib/python3.6/dist-packages/setuptools/dist.py", line 325, in __init__
    self.fetch_build_eggs(attrs['setup_requires'])
  File "/usr/lib/python3.6/dist-packages/setuptools/dist.py", line 446, in fetch_build_eggs
    replace_conflicting=True,
  File "/usr/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 855, in resolve
    dist = best[req.key] = env.best_match(req, ws, installer)
  File "/usr/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 1127, in best_match
    return self.obtain(req, installer)
  File "/usr/lib/python3.6/dist-packages/pkg_resources/__init__.py", line 1139, in obtain
    return installer(requirement)
  File "/usr/lib/python3.6/dist-packages/setuptools/dist.py", line 518, in fetch_build_egg
    return cmd.easy_install(req)
  File "/usr/lib/python3.6/dist-packages/setuptools/command/easy_install.py", line 691, in easy_install
    return self.install_item(spec, dist.location, tmpdir, deps)
  File "/usr/lib/python3.6/dist-packages/setuptools/command/easy_install.py", line 717, in install_item
    dists = self.install_eggs(spec, download, tmpdir)
  File "/usr/lib/python3.6/dist-packages/setuptools/command/easy_install.py", line 898, in install_eggs
    return self.build_and_install(setup_script, setup_base)
  File "/usr/lib/python3.6/dist-packages/setuptools/command/easy_install.py", line 1137, in build_and_install
    self.run_setup(setup_script, setup_base, args)
  File "/usr/lib/python3.6/dist-packages/setuptools/command/easy_install.py", line 1123, in run_setup
    run_setup(setup_script, args)
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 257, in run_setup
    raise
  File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 199, in setup_context
    yield
  File "/usr/lib64/python3.6/contextlib.py", line 99, in __exit__
    self.gen.throw(type, value, traceback)
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 170, in save_modules
    saved_exc.resume()
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 145, in resume
    six.reraise(type, exc, self._tb)
  File "/usr/lib/python3.6/dist-packages/pkg_resources/_vendor/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 158, in save_modules
    yield saved
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 199, in setup_context
    yield
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 254, in run_setup
    _execfile(setup_script, ns)
  File "/usr/lib/python3.6/dist-packages/setuptools/sandbox.py", line 49, in _execfile
    exec(code, globals, locals)
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/setup.py", line 444, in <module>
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/setup.py", line 436, in setup_package
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/core.py", line 171, in setup
  File "/usr/lib64/python3.6/distutils/core.py", line 148, in setup
    dist.run_commands()
  File "/usr/lib64/python3.6/distutils/dist.py", line 955, in run_commands
    self.run_command(cmd)
  File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/usr/lib/python3.6/dist-packages/setuptools/command/bdist_egg.py", line 152, in run
    self.run_command("egg_info")
  File "/usr/lib64/python3.6/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/egg_info.py", line 26, in run
  File "/usr/lib64/python3.6/distutils/cmd.py", line 313, in run_command
    self.distribution.run_command(command)
  File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command
    cmd_obj.run()
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/build_src.py", line 142, in run
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/build_src.py", line 153, in build_sources
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/build_src.py", line 286, in build_library_sources
  File "/tmp/easy_install-z9uvzst7/numpy-1.17.4/numpy/distutils/command/build_src.py", line 369, in generate_sources
  File "numpy/core/setup.py", line 669, in get_mathlib_info
RuntimeError: Broken toolchain: cannot link a simple C program
----------------------------------------

ОШИБКА: команда завершилась ошибкой с состоянием выхода 1: python setup.py egg_info Проверьте журналы для полного вывода команды.

Ответы [ 2 ]

1 голос
/ 01 ноября 2019

Для установки cvxpy в Windows требуются инструменты сборки на С ++ (см .: https://buildmedia.readthedocs.org/media/pdf/cvxpy/latest/cvxpy.pdf)

В Windows:

pip install cvxpy --target python/lib/python3.7/site-packages

В Linux:

  • Я создал ту же структуру каталогов, что и раньше python/lib/python3.7/site-packages, установил cvxpy и сжал его, как показано ниже.
  • Позже я загрузил zip-файл в корзину S3 и создал новый лямбда-слой.
  • Прикрепляя этот лямбда-слой к моей лямбда-функции, яможет решить проблемы с импортом, которые не удалось выполнить ранее, и запустить простую программу cvxpy на lambda.
mkdir -p alley/python/lib/python3.7/site-packages
pip install cvxpy --target alley/python/lib/python3.7/site-packages
cd alley
zip -rqvT cvxpy_layer.zip .

Лямбда-слой Изображение:

enter image description here

Выполнение лямбда-функции:

enter image description here

0 голосов
/ 31 октября 2019

Вы можете обернуть все свои зависимости вместе с лямбда-источником в один zip-файл и развернуть его. В результате вы получите дополнительный повторяющийся код в нескольких лямбда-функциях. Предположим, если для более чем одной из ваших лямбда-функций требуется один и тот же пакет cvxpy, вам придется упаковать его дважды для обеих функций по отдельности.

Вместо этого лучшим вариантом будет попытка Labmda Layers, гдеВы помещаете все свои зависимости в пакет и внедряете слой в свою Lambda. Затем присоедините этот слой к вашей функции, чтобы получить оттуда его зависимости. Слои могут быть даже версионными. :)

Пожалуйста, обратитесь по ссылкам ниже:

...