【问题标题】:Numpy in Python script fails to import when called from the command prompt从命令提示符调用时,Python 脚本中的 Numpy 无法导入
【发布时间】:2019-09-25 07:08:35
【问题描述】:

我正在尝试通过在 VBA 宏中调用脚本来从 Excel 运行一个简单的 Python 脚本。每当我从 Spyder 运行脚本时,它都能完美执行。但是,当我使用 VBA 从 Excel 调用脚本时,它会失败。这仅在我将 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 "

到目前为止一切正常。但是,如果我在 python 脚本中添加一条将 Numpy 或 Pandas 导入的语句,则无法再从 Excel 中成功调用该脚本。但是,我可以从 Spyder 运行脚本并产生预期的结果。

我最初叫python.exe,但是当我使用时:

import sys
print(sys.executable)

我看到 Spyder 正在调用 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 和 geopandas)

我希望能够将这样的内容打印到 Excel:

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

编辑---------------------------------- 我还确认它与 Numpy 有关。我能够在我的 Python 代码中 import sys 没有任何问题,但我仍然遇到 Numpy 和 Pandas 的问题。

其他人已成功运行此代码,所以我怀疑它一定是某种与环境相关的问题。但是,我真的不知道如何管理我的环境。

有关示例,请参阅此 youtube 视频和 cmets: 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

我在家的电脑和工作的电脑上都会出现同样的问题。

【问题讨论】:

  • 您用来执行的命令提示符上的可执行行是什么?你可以试试os.system()函数。
  • 我试过你的代码,即使我导入numpy & Pandas,它在我的系统中也能正常工作
  • @AmazingThingsAroundYou - 我不确定你在问什么。 Windows 命令提示符功能在我的 Shell() 命令的 VBA 代码中给出。你能澄清一下你的意思吗?
  • @Mikku - 其他人也尝试过,并且对他们有用。观看 SigmaCoding 的 youtube 视频和 cmets:youtube.com/…

标签: python excel vba numpy


【解决方案1】:

好的,让我们来看看我们需要对您的代码进行的一些更改。我认为问题出在这样一个事实,即当您引用 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

试试这个,看看你会得到什么。

【讨论】:

  • 谢谢。这并没有解决问题,但我确实喜欢更简洁的连接。我正在尝试全新安装 Anaconda...
  • 全新安装也没有解决问题。 )-:
【解决方案2】:

2019 年 9 月 24 日最新更新

这个问题及其解决方案最好在这里描述:

https://conda.io/projects/conda/en/latest/user-guide/troubleshooting.html#shell-commands-open-from-the-wrong-location

问题出在 PATH 变量上,但可以通过停用和重新激活环境轻松解决。简单地将位置添加到路径并不一定能解决问题 - 它不适合我。打开 anaconda 提示符和deactivate base 然后reactivate base

这里也描述了这个问题:

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

使用conda install anaconda=5.2.0 将我的 Anaconda 版本重置回 5.2.0 确实有效,但我不知道为什么。

【讨论】:

    猜你喜欢
    • 2011-08-17
    • 2017-03-10
    • 2020-03-19
    • 2020-08-05
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    • 2014-11-21
    • 2021-10-12
    相关资源
    最近更新 更多