Как установить GRPCIO на ноутбук Apple M1 Silicon?
Каждый раз, когда я пытаюсь установить
pip
пакет с GRPCIO в качестве зависимости внутри
.direnv
project Я получаю сбой сборки из-за того, что моя архитектура - arm64. Как я могу обойти это, ожидая, пока команда GRPCIO выпустит обновление?
Using cached grpcio-1.34.0.tar.gz (21.0 MB)
ERROR: Command errored out with exit status 1:
command: /Users/yoav/Library/Caches/pypoetry/virtualenvs/orca-g6p4a6cZ-py3.8/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/jj/r3j0p91s2qgdpcpf5ptqr9qm0000gn/T/pip-install-n05vw0u0/grpcio_103d947f24954cde8b8a019b4c9f88fe/setup.py'"'"'; __file__='"'"'/private/var/folders/jj/r3j0p91s2qgdpcpf5ptqr9qm0000gn/T/pip-install-n05vw0u0/grpcio_103d947f24954cde8b8a019b4c9f88fe/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /private/var/folders/jj/r3j0p91s2qgdpcpf5ptqr9qm0000gn/T/pip-pip-egg-info-z41yqiw6
cwd: /private/var/folders/jj/r3j0p91s2qgdpcpf5ptqr9qm0000gn/T/pip-install-n05vw0u0/grpcio_103d947f24954cde8b8a019b4c9f88fe/
Complete output (10 lines):
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/jj/r3j0p91s2qgdpcpf5ptqr9qm0000gn/T/pip-install-n05vw0u0/grpcio_103d947f24954cde8b8a019b4c9f88fe/setup.py", line 359, in <module>
if mac_target and (pkg_resources.parse_version(mac_target) <
File "/Users/yoav/Library/Caches/pypoetry/virtualenvs/orca-g6p4a6cZ-py3.8/lib/python3.8/site-packages/pkg_resources/__init__.py", line 113, in parse_version
return packaging.version.Version(v)
File "/Users/yoav/Library/Caches/pypoetry/virtualenvs/orca-g6p4a6cZ-py3.8/lib/python3.8/site-packages/pkg_resources/_vendor/packaging/version.py", line 275, in __init__
match = self._regex.search(version)
TypeError: expected string or bytes-like object
ASM Builds for BoringSSL currently not supported on: macosx-11-arm64
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
11 ответов
Кажется, это работает хорошо, сделайте следующее в терминале
export GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1
export GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1
А затем установите любой пакет, который вы хотели установить, в моем случае я пытался установить администратора firebase, и мне пришлось запустить следующий
pip install firebase-admin
Или просто запустите команду ниже, если вы просто хотите установить grpcio
pip install grpcio
Я нашел ветку полезной, чтобы подробно разобраться в этой проблеме этуhttps://github.com/grpc/grpc/issues/25082
CFLAGS="-I / opt / homebrew / opt / openssl / include" LDFLAGS="- L / opt / homebrew / opt / openssl / lib" GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 metxt для установки этого пипса требуется для установки этого файла. мой Mac Book Pro M1 bigsur. Спасибо за решение
Я нашел решение, которое работает с https://github.com/grpc/grpc/issues/25082 с более подробной информацией и удалением некоторых ненужных шагов. Обратите внимание, что это работает только на Python версии 3.9 на дату публикации.
Сначала установите
pyenv
и
pyenv-virtualenv
.
brew install pyenv pyenv-virtualenv
Обратите внимание, что вам может потребоваться изменить переменную оценки оболочки, просто добавив
eval "$(pyenv init -)"
похоже, не работает на компьютерах Apple M1. Вместо этого запустите следующий
pyenv init - >> .zshrc
pyenv virtualenv-init - >> .zshrc
Затем перейдите в каталог проекта Python и создайте
.envrc
и зарегистрируйте его с помощью
direnv
echo 'layout pyenv 3.9.1' > .envrc
direnv allow
Затем установите свой
requirements.txt
через
GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 pip install -r requirements.txt
Collecting google-cloud-pubsub
Using cached google_cloud_pubsub-2.3.0-py2.py3-none-any.whl (210 kB)
Collecting proto-plus>=1.7.1
Using cached proto_plus-1.17.0-py3-none-any.whl (42 kB)
Collecting grpc-google-iam-v1<0.13dev,>=0.12.3
Using cached grpc-google-iam-v1-0.12.3.tar.gz (13 kB)
Collecting libcst>=0.3.10
Using cached libcst-0.3.17-py3-none-any.whl (507 kB)
Collecting google-api-core[grpc]<2.0.0dev,>=1.22.2
Using cached google_api_core-1.26.1-py2.py3-none-any.whl (92 kB)
Collecting protobuf>=3.12.0
Using cached protobuf-3.15.6-py2.py3-none-any.whl (173 kB)
Collecting grpcio<2.0.0dev,>=1.0.0
Using cached grpcio-1.36.1.tar.gz (21.5 MB)
Collecting googleapis-common-protos[grpc]<2.0.0dev,>=1.5.2
Using cached googleapis_common_protos-1.53.0-py2.py3-none-any.whl (198 kB)
Collecting typing-inspect>=0.4.0
Using cached typing_inspect-0.6.0-py3-none-any.whl (8.1 kB)
Processing /Users/rkmacmini/Library/Caches/pip/wheels/b7/a5/c4/504d913c2a55bb09c607541578ec5f844d1ff33467abe93ba5/PyYAML-5.4.1-cp39-cp39-macosx_11_0_arm64.whl
Collecting typing-extensions>=3.7.4.2
Using cached typing_extensions-3.7.4.3-py3-none-any.whl (22 kB)
Collecting six>=1.13.0
Using cached six-1.15.0-py2.py3-none-any.whl (10 kB)
Collecting google-auth<2.0dev,>=1.21.1
Using cached google_auth-1.27.1-py2.py3-none-any.whl (136 kB)
Collecting pytz
Using cached pytz-2021.1-py2.py3-none-any.whl (510 kB)
Requirement already satisfied: setuptools>=40.3.0 in ./.direnv/python-3.9.1/lib/python3.9/site-packages (from google-api-core[grpc]<2.0.0dev,>=1.22.2->google-cloud-pubsub->-r requirements.txt (line 1)) (49.2.1)
Collecting packaging>=14.3
Using cached packaging-20.9-py2.py3-none-any.whl (40 kB)
Collecting requests<3.0.0dev,>=2.18.0
Using cached requests-2.25.1-py2.py3-none-any.whl (61 kB)
Collecting mypy-extensions>=0.3.0
Using cached mypy_extensions-0.4.3-py2.py3-none-any.whl (4.5 kB)
Collecting pyasn1-modules>=0.2.1
Using cached pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)
Collecting cachetools<5.0,>=2.0.0
Using cached cachetools-4.2.1-py3-none-any.whl (12 kB)
Collecting rsa<5,>=3.1.4; python_version >= "3.6"
Using cached rsa-4.7.2-py3-none-any.whl (34 kB)
Collecting pyparsing>=2.0.2
Using cached pyparsing-2.4.7-py2.py3-none-any.whl (67 kB)
Collecting idna<3,>=2.5
Using cached idna-2.10-py2.py3-none-any.whl (58 kB)
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.4-py2.py3-none-any.whl (153 kB)
|████████████████████████████████| 153 kB 1.1 MB/s
Collecting certifi>=2017.4.17
Using cached certifi-2020.12.5-py2.py3-none-any.whl (147 kB)
Collecting chardet<5,>=3.0.2
Using cached chardet-4.0.0-py2.py3-none-any.whl (178 kB)
Collecting pyasn1<0.5.0,>=0.4.6
Using cached pyasn1-0.4.8-py2.py3-none-any.whl (77 kB)
Using legacy 'setup.py install' for grpc-google-iam-v1, since package 'wheel' is not installed.
Using legacy 'setup.py install' for grpcio, since package 'wheel' is not installed.
Installing collected packages: six, protobuf, proto-plus, grpcio, googleapis-common-protos, grpc-google-iam-v1, mypy-extensions, typing-extensions, typing-inspect, pyyaml, libcst, pyasn1, pyasn1-modules, cachetools, rsa, google-auth, pytz, pyparsing, packaging, idna, urllib3, certifi, chardet, requests, google-api-core, google-cloud-pubsub
Running setup.py install for grpcio ... done
Running setup.py install for grpc-google-iam-v1 ... done
Successfully installed cachetools-4.2.1 certifi-2020.12.5 chardet-4.0.0 google-api-core-1.26.1 google-auth-1.27.1 google-cloud-pubsub-2.3.0 googleapis-common-protos-1.53.0 grpc-google-iam-v1-0.12.3 grpcio-1.36.1 idna-2.10 libcst-0.3.17 mypy-extensions-0.4.3 packaging-20.9 proto-plus-1.17.0 protobuf-3.15.6 pyasn1-0.4.8 pyasn1-modules-0.2.8 pyparsing-2.4.7 pytz-2021.1 pyyaml-5.4.1 requests-2.25.1 rsa-4.7.2 six-1.15.0 typing-extensions-3.7.4.3 typing-inspect-0.6.0 urllib3-1.26.4
ПРИМЕЧАНИЕ. В некоторых справочниках говорится, что вам нужно указать свои CFLAGS и т. Д. В местах установки openssl brew, но мне это не казалось необходимым. Если у вас есть проблема, вы можете попробовать команду с включенным CFLAGS через
CFLAGS="-I /opt/homebrew/opt/openssl/include" LDFLAGS="-L /opt/homebrew/opt/openssl/lib" GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 pip install -r requirements.txt
Есть гораздо более простой и надежный вариант:
pip uninstall grpcio
conda install grpcio
Изменить: теперь Google предоставляет официальные сборки grpcio для Apple Silicon Mac, начиная с версии 1.51.3. Загрузка неофициального бинарника больше не требуется.
К сожалению, Google не предоставляет колеса для Apple Silicon Mac. Как видно из этого выпуска, пользователи придумали множество флагов компилятора для компиляции библиотеки на M1, которые не всегда работают.
Устав от этих проблем, я опубликовал репозиторий grpcio-mac-arm-build, который содержит ежедневное задание GitHub Actions, которое компилирует последние стабильные иgrpcio-tools
релизы для Apple Silicon. Скомпилированные колеса для Python 3.8, 3.9, 3.10 и 3.11 доступны для загрузки на странице «Релизы». Все с открытым исходным кодом и выпущено с той же лицензией, что иgrpcio
библиотека. Таким образом, вам вообще не нужно компилировать библиотеку.
Вам больше не нужно ничего этого делать. Теперь, когда поддержка сообщества Apple Silicon набрала обороты, все работает как надо. Приятного кодирования!
После многих попыток я наконец установил его, выполнив следующие команды:
xcode-select --install
brew install openssl re2
export LDFLAGS="-L$(/opt/homebrew/bin/brew --prefix openssl)/lib -L$(/opt/homebrew/bin/brew --prefix re2)/lib"
export CPPFLAGS="-I$(/opt/homebrew/bin/brew --prefix openssl)/include -I$(/opt/homebrew/bin/brew --prefix re2)/include"
GRPC_BUILD_WITH_BORING_SSL_ASM=""
GRPC_PYTHON_BUILD_SYSTEM_RE2=true
GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=true
GRPC_PYTHON_BUILD_SYSTEM_ZLIB=true
pip install grpcio
Взято отсюда: https://candid.technology/error-command-usr-bin-clang-failed-with-exit-code-1/
Следующие настройки работали для меня,
Использовал https://asdf-vm.com/ для установки и управления моим питоном.
Использовал https://direnv.net и создал$PWD/.envrc
только с одной строкой
layout python
Убедился, что я установил последнюю версию Python 3.9, используя asdf
asdf plugin-add python
asdf install python 3.9.15
Тогда сделал,
direnv allow .
Это должно создать Python venv под$PWD/.direnv
, затем сделал
pip install -U pip wheel grpcio
ВАЖНО: Версии Python, отличные от 3.9.x, не работали для моего, например, 3.10 не работает с некоторымиclang
проблема
Мне удается заставить его работать без изменения какой-либо переменной в моей ОС. Кажется, это связано с проблемой версии Python. Я использовал 3.7.12 с ошибкой. 3.8.12 не удалось. Наконец, в версии 3.10.2 этот пакет был установлен.
Ни одно из предложений не сработало для меня. Ниже показано, что сработало (при условии, что у вас установлен доморощенный):
- Бегать
brew install miniconda
(продолжить с -conda init "$(basename "${SHELL}")"
, как указано.) - Либо введите ваш ~/.zshrc, либо уничтожьте свой терминал и снова откройте.
- Бегать
conda create --name myenv python=3.10
. - Бегать
conda activate myenv
. - Бегать
pip install grpcio
.
Это заставило brew установить правильный arm64 conda env на шаге 1, поэтому все остальное выполнимо.
используйте приведенный ниже код, у меня он сработал (Mac book m1 Big Sur)
введите описание изображения здесь GRPC_PYTHON_BUILD_SYSTEM_OPENSSL=1 GRPC_PYTHON_BUILD_SYSTEM_ZLIB=1 пункт установить grpcio