Проблема с установкой apache-flink:1.19.0 с использованием докера Python 3.9–3.12

У меня возникли проблемы с установкой PyFlink/apache-flink 1.19.0 с помощью Python Docker 3.9–3.12 после официального руководства.

Кажется, ошибка связана с путем, возвращающим NoneType, но я не знаю, как это исправить.

Я не ставил python:3.12, так как ошибка такая же, как и у других.

Можете ли вы помочь мне в этом?

Большое спасибо.

Питон 3.9

docker run - it python:3.9 python - m pip install apache-flink

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [22 lines of output]
      Traceback (most recent call last):
        File "/usr/local/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/usr/local/lib/python3.9/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/tmp/pip-build-env-rdoi1tww/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 162, in get_requires_for_build_wheel
          return self._get_build_requires(
        File "/tmp/pip-build-env-rdoi1tww/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 143, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-rdoi1tww/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 267, in run_setup
          super(_BuildMetaLegacyBackend,
        File "/tmp/pip-build-env-rdoi1tww/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 158, in run_setup
          exec(compile(code, __file__, 'exec'), locals())
        File "setup.py", line 169, in <module>
          include_dirs=get_java_include() + ['src/main/c/pemja/core/include'],
        File "setup.py", line 111, in get_java_include
          inc = os.path.join(get_java_home(), inc_name)
        File "/usr/local/lib/python3.9/posixpath.py", line 76, in join
          a = os.fspath(a)
      TypeError: expected str, bytes or os.PathLike object, not NoneType
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

Питон 3.10

docker run - it python:3.10 python - m pip install apache-flink

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [22 lines of output]
      Traceback (most recent call last):
        File "/usr/local/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/usr/local/lib/python3.10/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
        File "/tmp/pip-build-env-ptcni4h1/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 162, in get_requires_for_build_wheel
          return self._get_build_requires(
        File "/tmp/pip-build-env-ptcni4h1/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 143, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-ptcni4h1/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 267, in run_setup
          super(_BuildMetaLegacyBackend,
        File "/tmp/pip-build-env-ptcni4h1/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 158, in run_setup
          exec(compile(code, __file__, 'exec'), locals())
        File "setup.py", line 169, in <module>
          include_dirs=get_java_include() + ['src/main/c/pemja/core/include'],
        File "setup.py", line 111, in get_java_include
          inc = os.path.join(get_java_home(), inc_name)
        File "/usr/local/lib/python3.10/posixpath.py", line 76, in join
          a = os.fspath(a)
      TypeError: expected str, bytes or os.PathLike object, not NoneType
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

note: This error originates from a subprocess, and is likely not a problem with pip.

Питон 3.11

docker run - it python:3.11 python - m pip install apache-flink

  × Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [27 lines of output]
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-jpt4cjc2/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 162, in get_requires_for_build_wheel
          return self._get_build_requires(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-jpt4cjc2/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 143, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-jpt4cjc2/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 268, in run_setup
          self).run_setup(setup_script=setup_script)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-jpt4cjc2/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 158, in run_setup
          exec(compile(code, __file__, 'exec'), locals())
        File "setup.py", line 169, in <module>
          include_dirs=get_java_include() + ['src/main/c/pemja/core/include'],
                       ^^^^^^^^^^^^^^^^^^
        File "setup.py", line 111, in get_java_include
          inc = os.path.join(get_java_home(), inc_name)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "<frozen posixpath>", line 76, in join
      TypeError: expected str, bytes or os.PathLike object, not NoneType
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> See above for output.

ОБНОВЛЕНИЕ 15.04.2024

Это работает в Windows. Но при использовании этой команды на Mac она не работает: это проблема с разрешением?

docker run -it python:3.11 pip install apache-flink

Моя конфигурация Мака:

  • М1 Макс
  • Сонома 14.4.1

Сообщение ниже:

× Getting requirements to build wheel did not run successfully.
  │ exit code: 1
  ╰─> [27 lines of output]
      Traceback (most recent call last):
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
          main()
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/usr/local/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
          return hook(config_settings)
                 ^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-r8xb1epe/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 162, in get_requires_for_build_wheel
          return self._get_build_requires(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-r8xb1epe/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 143, in _get_build_requires
          self.run_setup()
        File "/tmp/pip-build-env-r8xb1epe/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 268, in run_setup
          self).run_setup(setup_script=setup_script)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/tmp/pip-build-env-r8xb1epe/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 158, in run_setup
          exec(compile(code, __file__, 'exec'), locals())
        File "setup.py", line 169, in <module>
          include_dirs=get_java_include() + ['src/main/c/pemja/core/include'],
                       ^^^^^^^^^^^^^^^^^^
        File "setup.py", line 111, in get_java_include
          inc = os.path.join(get_java_home(), inc_name)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "<frozen posixpath>", line 76, in join
      TypeError: expected str, bytes or os.PathLike object, not NoneType
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.

Не уверен, что при запуске docker run -it --rm python:3.9 python -m pip install apache-flink я успешно устанавливаю модуль. Попробуйте убрать пробелы между - i и - m.

Andrej Kesely 14.04.2024 19:51

Вы привязаны к использованию Flink?

S Rosam 16.04.2024 10:37
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
2
190
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Эти команды должны работать:

docker run -it python:3.9 pip install apache-flink
docker run -it python:3.10 pip install apache-flink
docker run -it python:3.11 pip install apache-flink

Пакет apache-flink во всех случаях будет установлен в работающий контейнер. Однако сразу после установки пакета контейнер закроется, так что это не очень полезно.

Было бы разумнее создать новый образ с установленным пакетом.

🗎 Dockerfile

FROM python:3.11

RUN pip install apache-flink==1.19.0

Сборка и запуск.

docker build -t python-flink .
docker run -it python-flink

В работающем контейнере вы сможете импортировать pyflink.

Я не публиковал python:3.12, так как ошибка такая же, как и у других.

Вы уверены? На самом деле я получаю другую ошибку с Python 3.12, которая выглядит как проблема совместимости версий с пакетом apache-flink.

Да, это работает для Python: 3.11. Я уверен, что для Python3.12 я получил ту же ошибку, что и раньше (я использую Mac). Сегодня, когда я использую Windows, у меня другая версия: AttributeError: module 'pkgutil' has no attribute 'ImpImporter'. Did you mean: 'zipimporter'?. Но в любом случае, спасибо за вашу помощь.

Ellery Leung 15.04.2024 12:20

Да, это та же ошибка, что и в Python 3.12. Я думаю, что должна возникнуть проблема совместимости текущей версии apache-flink и Python 3.12.

datawookie 15.04.2024 12:21

Это странно: у меня такая же ошибка, если я использую Mac. Обновил вопрос

Ellery Leung 15.04.2024 16:57

Хорошо, так вам нужен Python 3.12 или подойдет 3.11? Если да, то думаю проблема решена.

datawookie 15.04.2024 17:50

Мне нужна версия 3.11, я использую Mac с Docker, но она работает только для Windows, надеюсь, вы сможете помочь.

Ellery Leung 15.04.2024 17:59

Это работает на Linux и, предположительно, на Mac: docker run -it python:3.11 pip install apache-flink. Я не понимаю, в чем проблема, когда вы это используете. Выше вы прокомментировали: «Да, это работает для Python: 3.11».

datawookie 16.04.2024 07:33
Ответ принят как подходящий

Для тех, у кого такая же проблема, как и у меня, кто пытается установить apache-flink в Macbook M1 через докер, я нашел ответ.

Основная причина: pemja требует установки JAVA_HOME

Итак, все, что вам нужно сделать, это сначала установить JAVA jdk (не jre):

  • Я использую openjdk 17. Это единственный openJDK, который я нашел на изображении Python:3.11.
    • Для установки запустите apt install -y openjdk-17-jdk
  • Установите переменную JAVA_HOME с помощью: export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-arm64.
    • Это то место, которое я нашел, у вас оно может быть другим. Посмотрите его, когда это необходимо.
  • Установите pemja: ​​pip install pemja.
  • Если вышеперечисленное удалось, бегите pip install apache-flink

Тогда вы сможете успешно установить клиент apache-flink.

Последний шаг — зафиксировать этот образ и создать собственный образ Docker:

  • docker commit -m "fix apche-flink install issue" <your container name> <your_docker_image_name>:<your_docker_image_tag>

Надеюсь, это кому-то поможет.

Другие вопросы по теме