【问题标题】:Launching Python script from Windows command line: script starts, then fails从 Windows 命令行启动 Python 脚本:脚本启动,然后失败
【发布时间】:2019-07-17 18:35:50
【问题描述】:

我是新手,请多多包涵。

我从另一位工程师那里继承了一个 python 脚本。为方便起见,我希望能够从 Windows bat 文件启动脚本,但最初尝试通过从 Windows 命令行运行来进行调试。

每当我从 CMD 启动脚本时,它似乎启动正常,然后立即失败并出现错误。

我的环境: Windows7 Pro 和 Windows10 Pro(出现同样的错误), Anaconda 3.7 , Spyder 3.3.2

当我从 内部 Spyder 运行脚本时,脚本运行良好,没有错误。

当我尝试从 Windows CMD 运行时:

  C:\Windows\system32>  "%programdata%\Anaconda3\python.exe"   "B:\IcCharData\B1505_Process_Data_20190214.py"

我收到以下错误:

Traceback (most recent call last):
  File "B:\IcCharData\B1505_Process_Data_20190214.py", line 21, in <module>
    import pandas as pd # Dataframe library
  File "C:\ProgramData\Anaconda3\lib\site-packages\pandas\__init__.py", line 19, in <module>
    "Missing required dependencies {0}".format(missing_dependencies))
ImportError: Missing required dependencies ['numpy']

下面是脚本的第一部分,带有实际的 #s 行,错误似乎源于此。 互联网搜索无果。

可能是什么问题?
同样,请注意脚本在 Spyder 内部运行良好

[snipped some irrelevant comments]

20  # Load the necessary libraries
21  import pandas as pd # Dataframe library
22  import numpy as np # Numeric library
23  import glob # Files related
24  import os # Operating System related
25  import sys #Operating System related
26  import re # regular expression related
27  import sqlite3 # database
28  import datetime
29  import subprocess # for running external programs like JMP from python
30  import logging # enables logging to both screen and a file
31  import statsmodels.api as sm # Modeling library used for linear regression

33  # Logging settings
34  logfilename = "./3_OutputData/B1505_Data_Process_Log_" + datetime.datetime.now().strftime("%Y-%m-%d-%H-%M") + '.txt'
35  level = logging.INFO
36  format = '  %(message)s'
37  handlers = [logging.FileHandler(logfilename), logging.StreamHandler()]
38  logging.basicConfig(level = level, format = format, handlers = handlers)

[snipped remaining 300+ lines of code]

添加于 2019-02-24,以回应 AJNeufeld 的评论:

在 Spyder 中运行:

import sys
print(sys.path)

runfile('B:/Desktop/untitled0.py', wdir='B:/Desktop')    # TH: apparently because spyder prompted me to save the script here#
[
'C:\\Users\\th',                 # TH: line not present with Anaconda Prompt#
'C:\\ProgramData\\Anaconda3\\python37.zip', 
'C:\\ProgramData\\Anaconda3\\DLLs', 
'C:\\ProgramData\\Anaconda3\\lib', 
'C:\\ProgramData\\Anaconda3', 
'', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\win32', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\win32\\lib', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\Pythonwin', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\extensions', # TH: line not present with Anaconda Prompt#
'C:\\Users\\th\\.ipython'                       # TH: line not present with Anaconda Prompt#
]

在 Anaconda Prompt 中运行:

(base) C:\Users\th>python
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> import sys
>>> print(sys.path)

[
'', 
'C:\\ProgramData\\Anaconda3\\python37.zip', 
'C:\\ProgramData\\Anaconda3\\DLLs', 
'C:\\ProgramData\\Anaconda3\\lib', 
'C:\\ProgramData\\Anaconda3',
'C:\\ProgramData\\Anaconda3\\lib\\site-packages', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\win32', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\win32\\lib', 
'C:\\ProgramData\\Anaconda3\\lib\\site-packages\\Pythonwin'
]

【问题讨论】:

  • 如果适用于您的情况,您能否查看Installing NumPy via Anaconda in Windows 的答案?
  • 这对我的新手来说似乎无关紧要。请注意,我只安装了一个 python,几周前安装了“完整的”Anaconda 3.7。它应该包含所有必需的软件包,并且我还使用命令“conda update anaconda”进行了更新
  • 您能在 Spyder 和 Windows CMD 中的脚本中 print(sys.path) 吗?我怀疑它们会有所不同,根据启动方法指示不同的环境。
  • 可以试试跑吗:C:\Windows\system32&gt; "%programdata%\Anaconda3\python.exe" -c "import numpy as np; print(np.__version__)"
  • @Justin Ezequiel,好的,我将您的请求复制/粘贴到 CMD 中,我们从结果中学到了什么?它产生了更多不同类型的错误。不幸的是,错误列表太长,我无法在此处粘贴,cmets 不允许。

标签: python python-3.x anaconda


【解决方案1】:

我很确定(根据导入错误中给出的信息),您唯一需要做的就是在导入 pandas 之前导入 Numpy。您可以通过切换第 22 行和第 21 行来做到这一点。

【讨论】:

  • 脚本在 Spyder IDE 内运行正常,为什么从 windows 命令行调用时会“中断”?
  • 这应该没什么区别。导入顺序真的不重要。
  • @Tomothy32 这很重要,因为在 ImportError 中,它表明 Pandas 需要 Numpy 的依赖,因此您可以通过切换行来获得该依赖。
  • @TomH 也许 Spyder IDE 已经有了 Numpy 的依赖,所以 Pandas 能够正常运行
  • @ArnavPoddar 我认为您从根本上误解了导入。导入用于当前文件。打开一个新的文件/交互式窗口,输入import pandas as pd,如果你有所有依赖项安装,它将工作。不必导入依赖项。
【解决方案2】:

您是否至少尝试过conda install numpy,因为您的 Anaconda 安装似乎不包含 numpy。 (有人可以把它变成评论吗?谢谢。)

【讨论】:

  • "numpy", "numpy-base", "numpydoc" 已安装。抱歉,此回复格式不正确,难以阅读:(base) C:\Users\th> conda list # packages in environment at C:\ProgramData\Anaconda3: # # Name Version Build Channel [snipped] numpy 1.15.4 py37h19fb1c0_0 numpy-base 1.15.4 py37hc3f5095_0 numpydoc 0.8.0 py37_0
【解决方案3】:

如果您希望批处理文件正常工作,您的批处理文件需要如下所示:

调用 C:/ProgramData/Anaconda3/Scripts/activate.bat C:/ProgramData/Anaconda3 C:\ProgramData\Anaconda3\python.exe "C:/Users/xxx/Documents/script.py"

希望这会有所帮助...

【讨论】:

  • 乔纳森——它有效!太感谢了。一百年后我永远也猜不到这一点。你能解释一下为什么它有效吗? (我给了你一个“赞成”的投票,但它没有出现,因为我没有足够的“声誉”)
  • 欢迎@TomH 是的,经过反复试验。我认为存在一些与路径相关的问题,因此您需要专门指定所有可执行路径。
猜你喜欢
  • 2018-04-29
  • 1970-01-01
  • 1970-01-01
  • 2022-01-11
  • 2021-01-20
  • 2019-09-02
  • 2019-06-07
  • 2022-11-12
相关资源
最近更新 更多