Импорт Tensorflow в VSCode не работает

У меня возникли проблемы с импортом TensorFlow в мое приложение Python, только НО

  • если я запускаю свое приложение в VSCode (через отладчик) ИЛИ
  • если я запускаю его из терминала ВНУТРИ VSCode. Все работает нормально, если я запускаю приложение из терминала вне VSCode.

Я использую VSCode на macOS Big Sur версии 11.1 (чипсет M1). У меня установлены python 3.8.2 и TensorFlow в виртуальной среде.

Вот шаги для воспроизведения ошибки. Из терминала вне VSCode я запускаю

  1. source env/bin/activate для активации виртуальной среды

  2. python для запуска питона. Вывод на терминал (как и ожидалось): Python 3.8.2 (по умолчанию, 4 ноября 2020 г., 21:23:28) [...]

  3. import tensorflow as tf

  4. print(tf.__version__) Это выводит 2.4.0-rc0 на терминал (как и ожидалось).

Теперь, если я повторю те же самые шаги 1 и 2 во встроенном терминале VSCode, я получу точно такой же результат во 2. Однако, если я запущу команду 3 и попытаюсь импортировать тензорный поток, появится следующее сообщение об ошибке:

Traceback (most recent call last):
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
    from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found.  Did find:
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/__init__.py", line 41, in <module>
    from tensorflow.python.tools import module_util as _module_util
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/__init__.py", line 39, in <module>
    from tensorflow.python import pywrap_tensorflow as _pywrap_tensorflow
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 83, in <module>
    raise ImportError(msg)
ImportError: Traceback (most recent call last):
  File "/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/pywrap_tensorflow.py", line 64, in <module>
    from tensorflow.python._pywrap_tensorflow_internal import *
ImportError: dlopen(/Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so, 6): no suitable image found.  Did find:
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture
        /Volumes/SSD/Jan/Documents/Github/TradingBot/env/lib/python3.8/site-packages/tensorflow/python/_pywrap_tensorflow_internal.so: mach-o, but wrong architecture


Failed to load the native TensorFlow runtime.

See https://www.tensorflow.org/install/errors

for some common reasons and solutions.  Include the entire stack trace
above this error message when asking for help.

Похоже, что терминал в VSCode не использует те же сайт-пакеты, что и терминал вне VSCode, однако запуск print(sys.path) дает тот же результат.

Та же проблема возникает, если я пытаюсь запустить свое приложение в VSCode, тогда как оно работает, если я запускаю его из терминала.

Любые советы высоко ценится.


person pancakeNbacon    schedule 27.12.2020    source источник
comment
Снова проверьте оба терминала, но начните с запуска команды zsh, чтобы открыть новый сеанс оболочки. Это должно гарантировать, что вы используете оба терминала с одной и той же оболочкой и настройкой, поэтому результаты должны быть одинаковыми (теоретически). Мне любопытно посмотреть, что произойдет.   -  person Jay Mody    schedule 27.12.2020
comment
Я повторил тест, как было предложено, и запустил zsh до того, как выполнил шаги, описанные в исходном посте. Никаких изменений в результате. Как предложил @Ryan, я запустил echo $SHELL и which python, обе команды дают одинаковый результат во внутреннем и внешнем терминале. Tensorflow не был установлен через pip, поскольку версия, совместимая с M1, недоступна через pip. Поэтому pip show tensorflow выдает сообщение об ошибке как во внутреннем, так и во внешнем терминале @MollyWang.   -  person pancakeNbacon    schedule 28.12.2020
comment
@pancakeNbacon. Затем вы можете обратиться к текущей активированной среде в интегрированном Терминале, чтобы проверить, есть ли tensorflow в папке site-packages, если нет, скопируйте в нее модуль.   -  person Molly Wang-MSFT    schedule 29.12.2020


Ответы (4)


Попробуйте Python 3.7. Многие жаловались, что tensorflow не работает на 3.8, но работает на 3.7. Кроме того, попробуйте загрузить его с веб-страницы google tensorflow.

person The Pilot Dude    schedule 27.12.2020
comment
Я должен использовать версию python/tensorflow, которая работает с силиконом Apple M1. Поэтому v3.8 на данный момент мой единственный вариант. - person pancakeNbacon; 28.12.2020

Свинья отступает от Джея Моди в комментариях выше. Я бы сначала проверил, что оболочки, которые вы используете в коде VS, совпадают с оболочкой, которую вы используете в терминале кода, отличного от VS.

Попробуйте выполнить следующие команды оболочки:

echo $SHELL

Если вы получите тот же результат, я бы посоветовал убедиться, что используются точно такие же исполняемые файлы Python. Попробуйте ввести это в обеих оболочках:

which python
person Ryan    schedule 27.12.2020

В VS Code откройте встроенный терминал, после активации среды запустите

pip show tensorflow

чтобы проверить, существует ли модуль в текущей среде. Если нет, переустановите его.

person Molly Wang-MSFT    schedule 28.12.2020

Я до сих пор не знаю, почему эта проблема возникла в первую очередь, но теперь я решил ее, установив python 3.8 через сборку ARM mini-conda.

Вот шаги.

  1. Загрузите мини-конду отсюда https://conda-forge.org/blog/posts/2020-10-29-macos-arm64/ и установите его.
  2. После установки создайте новую среду Conda conda create --name python38 python=3.8. Это установит версию Python 3.8 для ARM.
  3. Активируйте новую среду conda activate python38
  4. Создайте новую виртуальную среду для вашего проекта. python -m venv myEnv
  5. Загрузите и распакуйте версию tensorflow для ARM https://github.com/apple/tensorflow_macos/releases
  6. Запустите прилагаемый скрипт для установки tensorflow. /Volumes/SSD/Jan/Downloads/tensorflow_macos/install_venv.sh --prompt и укажите его на только что созданную виртуальную среду на шаге 4.

С помощью этих шагов можно правильно импортировать тензорный поток.

Еще одна ссылка, которая указала мне на это решение: https://github.com/apple/tensorflow_macos/issues/8 https://github.com/apple/tensorflow_macos/issues/3

person pancakeNbacon    schedule 29.12.2020