Скрипт Numpy в Python не может быть импортирован при вызове из командной строки - PullRequest
0 голосов
/ 07 июня 2019

Я пытаюсь запустить простой скрипт Python из Excel, вызывая скрипт в макросе VBA. Всякий раз, когда я запускаю скрипт из Spyder, он выполняется отлично. Тем не менее, когда я вызываю скрипт из Excel с использованием VBA, он терпит неудачу. Это происходит только тогда, когда я импортирую Numpy или Pandas (я не пробовал другие библиотеки) в скрипт.

Макрос VBA, который вызывает скрипт, находится здесь:

Sub RunPythonScript2()

'Declare our variables
Dim RetVal As String
Dim exe As String
Dim python As String
Dim paths As String

exe = "C:\Users\myname\Anaconda3\pythonw.exe"
python = "C:\Users\myname\OneDrive\Reference Documents\Python\Excel and Python\03 Script.py"
paths = """" & exe & """" & " " & """" & python & """"

RetVal = Shell(paths, vbNormalFocus)

End Sub

Сценарий Python, который работает здесь:

import win32com.client

excelapp = win32com.client.Dispatch("Excel.Application")
wb = excelapp.Workbooks(1)
sht = wb.Worksheets(1)

sht.Range('A1').Value = "Hello World "

Пока все работает отлично. Однако, если я добавлю оператор для импорта Numpy или Pandas в скрипт python, я больше не смогу успешно вызвать скрипт из Excel. Однако я могу запустить скрипт из Spyder и получить ожидаемый результат.

Я первоначально назвал python.exe, но когда я использовал:

import sys
print(sys.executable)

Я видел, что Спайдер звонил pythonw.exe. Кажется, не имеет значения, звоню ли я python.exe или pythonw.exe.

Я не получаю никаких сообщений об ошибках при импорте Numpy и запуске сценария. В результате ничего не печатается в Excel.

Я использую следующие версии пакетов для Windows 10, 64-битная

  1. Python версия 3.7.3
  2. numpy версия 1.16.2
  3. pywin32 версия 223
  4. Пользовательская версия Anaconda (потому что я установил xlwings и геопанды)

Я бы хотел иметь возможность напечатать что-то подобное в Excel:

sht.Range('A1').Value = np.pi

редактирует ------------------------------------- Я также подтвердил, что это связано с Numpy. Я смог import sys в своем коде Python без каких-либо проблем, но у меня все еще есть проблемы с Numpy и Pandas.

Другие люди смогли успешно запустить этот код, поэтому я подозреваю, что это должно быть какая-то проблема, связанная с окружающей средой. Тем не менее, я не знаю, как управлять своей средой.

Смотрите это видео на YouTube и комментарии к примеру: https://www.youtube.com/watch?v=oVNeufjrx8M&list=PLcFcktZ0wnNnf4eh5ObzPzoLFOzTiFVKa&index=6&t=0s

Я пробовал чистую установку Anaconda, и у меня все еще есть проблема. Вот что возвращает conda info:

     active environment : base
    active env location : C:\Users\<user>\AppData\Local\Continuum\anaconda3
            shell level : 1
       user config file : C:\Users\<user>\.condarc
 populated config files : C:\Users\<user>\.condarc
          conda version : 4.6.14
    conda-build version : 3.17.8
         python version : 3.7.3.final.0
       base environment : C:\Users\<user>\AppData\Local\Continuum\anaconda3  (writable)
           channel URLs : https://repo.anaconda.com/pkgs/main/win-64
                          https://repo.anaconda.com/pkgs/main/noarch
                          https://repo.anaconda.com/pkgs/free/win-64
                          https://repo.anaconda.com/pkgs/free/noarch
                          https://repo.anaconda.com/pkgs/r/win-64
                          https://repo.anaconda.com/pkgs/r/noarch
                          https://repo.anaconda.com/pkgs/msys2/win-64
                          https://repo.anaconda.com/pkgs/msys2/noarch
          package cache : C:\Users\<user>\AppData\Local\Continuum\anaconda3\pkgs
                          C:\Users\<user>\.conda\pkgs
                          C:\Users\<user>\AppData\Local\conda\conda\pkgs
       envs directories : C:\Users\<user>\AppData\Local\Continuum\anaconda3\envs
                          C:\Users\<user>\.conda\envs
                          C:\Users\<user>\AppData\Local\conda\conda\envs
               platform : win-64
             user-agent : conda/4.6.14 requests/2.21.0 CPython/3.7.3 Windows/10 Windows/10.0.14393
          administrator : False
             netrc file : None
           offline mode : False

Эта же проблема возникает как на моем компьютере дома, так и на компьютере на работе.

Ответы [ 2 ]

0 голосов
/ 08 июня 2019

Вопрос оказался сложным.Наконец-то я решил попробовать запустить скрипт прямо из командной строки Windows.Я получил ожидаемую ошибку, описанную здесь:

https://superuser.com/questions/1413313/importerror-missing-required-dependencies-numpy

Однако изменение переменной пути мне не помогло.Я не пытался создавать или изменять среду.Если вы хотите проверить переменную пути из командной строки Windows, сначала введите python, нажмите клавишу ввода, а затем введите echo %PATH%.

Решение, которое наконец сработало, было этим.Мне пришлось сбросить версию Anaconda до версии 5.2.0.

Не удалось найти порядковый номер 242 в библиотеке динамических ссылок Anaconda3 \ Library \ bin \ mkl_intel_thread.dll

Теперь, после нескольких дней исследований, я наконец смог правильно использовать Python из Excel.Вперед и вверх.

0 голосов
/ 07 июня 2019

Хорошо, давайте пройдемся по некоторым изменениям, которые нам нужно внести в ваш код. Я думаю, что проблема заключается в том факте, что когда вы ссылаетесь на коллекцию Workbooks, вы используете метод индекса, а не метод ключа. Это может привести к неприятностям, если у вас есть личная книга макросов.

Индекс определяется в том порядке, в котором открыты рабочие книги, а личная рабочая книга макроса ВСЕГДА открывается первой. Это обычно имеет непредвиденные последствия, поэтому я советую людям просто использовать название рабочей книги. Измените следующее:

Старый:

wb = excelapp.Workbooks(1)

Новое:

wb = excelapp.Workbooks("myWorkbook.xlsm")

Кроме того, я думаю, что если мы удалим некоторые кавычки, это должно работать нормально. Я переписал каждую строку, чтобы она заключалась в тройные кавычки.

Старый:

exe = "C:\Users\myname\Anaconda3\pythonw.exe"
python = "C:\Users\myname\OneDrive\Reference Documents\Python\Excel and Python\03 Script.py"
paths = """" & exe & """" & " " & """" & python & """"

Новое:

Set objShell = VBA.CreateObject("Wscript.Shell")    
    exe = """C:\Users\<USER>\Anaconda3\pythonw.exe"""    
    python = """C:\Users\<USER>\OneDrive\myScript.py"""
    objShell.Run exe & python

Попробуйте и посмотрите, что вы получите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...