Использование numpy в Anaconda Python, работающем в emacs в Windows

#python #windows #numpy #emacs #anaconda

#python #Windows #numpy #emacs #anaconda

Вопрос:

На протяжении многих лет у меня были постоянные проблемы с этим, повторяю попытку. Я хотел бы использовать emacs в качестве моей среды разработки Python в Windows 10. Возможно, это связано с ветряными мельницами. Я использую emacs 26.3, встроенную сборку Windows от GNU и самую последнюю версию Anaconda 3.8.3.

Первая цель — запустить Python внутри emacs. Для этого мне нужно активировать Anaconda venv. Для этого я использую пакет pyvenv. Проблема, с которой я сталкиваюсь, одинакова независимо от того, использую я соответствующий пакет elpy или нет. Я только что обновил оба до самых последних на melpa (1.34.0 elpy, 1.21 pyvenv).

Итак, в my .emacs есть только эти соответствующие строки:

 (pyvenv-mode 1)
(pyvenv-activate "c:/Users/strozzi2/Anaconda3") 
(setq exec-path (cons "c:/Users/strozzi2/Anaconda3/condabin" exec-path))
  

Я запускаю emacs, выполняю «M-x run-python». Python запускается! И это версия Anaconda!

«импорт sys» или других стандартных модулей Python работает, но «импорт numpy» -> очень длинное сообщение (см. Ниже). Это похоже на то, что я получаю в виде простого запроса DOS, если я запускаю python, но сначала неправильно активирую venv.

Итак, как это исправить?

 Python 3.8.3 (default, Jul  2 2020, 17:30:36) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 4/5
0.8
>>> import numpy
c:Usersstrozzi2Anaconda3libsite-packagesnumpy__init__.py:140: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service
  from . import _distributor_init
Traceback (most recent call last):
  File "c:Usersstrozzi2Anaconda3libsite-packagesnumpycore__init__.py", line 24, in <module>
    from . import multiarray
  File "c:Usersstrozzi2Anaconda3libsite-packagesnumpycoremultiarray.py", line 14, in <module>
    from . import overrides
  File "c:Usersstrozzi2Anaconda3libsite-packagesnumpycoreoverrides.py", line 7, in <module>
    from numpy.core._multiarray_umath import (
ImportError: DLL load failed while importing _multiarray_umath: The specified module could not be found.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:Usersstrozzi2Anaconda3libsite-packagesnumpy__init__.py", line 142, in <module>
    from . import core
  File "c:Usersstrozzi2Anaconda3libsite-packagesnumpycore__init__.py", line 50, in <module>
    raise ImportError(msg)
ImportError: 

IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!

Importing the numpy C-extensions failed. This error can happen for
many reasons, often due to issues with your setup or how NumPy was
installed.

We have compiled some common reasons and troubleshooting tips at:

    https://numpy.org/devdocs/user/troubleshooting-importerror.html

Please note and check the following:

  * The Python version is: Python3.8 from "c:Usersstrozzi2Anaconda3python.exe"
  * The NumPy version is: "1.18.5"

and make sure that they are the versions you expect.
Please carefully study the documentation linked above for further help.

Original error was: DLL load failed while importing _multiarray_umath: The specified module could not be found.
  

Комментарии:

1. Вероятно, что-то обычно происходит во время активации среды Conda, которая venv не выполняется. Может быть полезно посмотреть выходные данные conda shell.cmd.exe activate base и любые сценарии, на которые он ссылается. Предполагая, что вы начинаете с cmd.exe сеанса, это точно скажет вам, что Conda делает для активации.

2. @merv Спасибо, от cmd.exe Я сделал conda shell.cmd.exe activate base и получил одну строку вывода: C:Usersstrozzi2AppDataLocalTemp1tmp0aaze9yp.bat . Этот файл задает путь и 8 переменных, связанных с Conda. Следующий вопрос заключается в том, как выяснить, что делает venv. Я не «хорош» в Windows, в основном я использую bash, но у меня есть компьютер с Windows для работы. Я надеюсь, что мне не нужно становиться экспертом в DOS, чтобы исправить это!

3. Еще одна вещь — я не понимаю «shell.cmd.exe » построить. И Google не помогает, я не могу понять, как сообщить это страницам reutrn буквально с этой строкой (включая точки).

4. Итак, некоторый прогресс — от cmd.exe Я сделал «conda activate», затем запустил emacs из этой оболочки, и «импорт numpy» работает! Итак, решение существует. В идеале это должно произойти при простом запуске emacs, а не через cmd.

5. извините, да, shell.* команды являются внутренними. Я просто знаю их из отладки. Conda использует их для генерации сценариев, необходимых для активации сред на лету. Он буквально вызывает это и оценивает.