1
votes

Lancement du script Python à partir de la ligne de commande Windows: le script démarre, puis échoue

Je suis un novice de rang, soyez indulgents avec moi.

J'ai hérité d'un script python d'un autre ingénieur. Pour plus de commodité, je souhaite pouvoir lancer le script à partir d'un fichier bat Windows, mais j'essaie initialement de déboguer en exécutant à partir de la ligne de commande Windows.

Chaque fois que je lance le script à partir de CMD, il semble démarrer OK, puis échoue immédiatement avec des erreurs.

Mon environnement: Windows7 Pro et Windows10 Pro (les mêmes erreurs se produisent), Anaconda 3.7, Spyder 3.3.2

Lorsque j'exécute le script depuis à l'intérieur Spyder, le script fonctionne correctement, aucune erreur.

Lorsque j'essaye d'exécuter à partir de Windows CMD:

(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'
]

J'obtiens ces erreurs:

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#
]

Voici la première partie de le script, avec les numéros de ligne réels, d'où les erreurs semblent provenir. Les recherches sur Internet ont été infructueuses.

Quels pourraient être les problèmes?
Encore une fois, notez que le script fonctionne bien depuis l'intérieur de 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]

AJOUTÉ le 24/02/2019, en réponse au commentaire d'AJNeufeld:

Ran in Spyder:

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']

Ran dans l'invite Anaconda:

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


9 commentaires

Pouvez-vous vérifier les réponses sur Installation de NumPy via Anaconda sous Windows le cas échéant ton cas?


Cela ne semble pas pertinent, à mes yeux novices. Notez que je n'ai qu'une seule installation python, l'Anaconda 3.7 "complète" installée il y a quelques semaines. Il devrait avoir tous les packages requis, et j'ai également mis à jour avec la commande "conda update anaconda"


Pourriez-vous imprimer (sys.path) à partir d'un script à la fois dans Spyder et depuis Windows CMD? Je soupçonne qu'ils seront différents, indiquant des environnements différents en fonction de la méthode de lancement.


Pouvez-vous essayer d'exécuter: C: \ Windows \ system32> "% programdata% \ Anaconda3 \ python.exe" -c "import numpy as np; print (np .__ version__)"


@Justin Ezequiel, ok j'ai copié / collé votre requête dans CMD, que nous apprend le résultat? Cela a généré plus et différents types d'erreurs. Malheureusement, la liste des erreurs est trop longue pour que je puisse la coller ici, les commentaires ne le permettent pas.


@AJNeufeld, j'ai mis à jour mon message d'origine pour afficher le résultat de "sys.path" exécuté depuis l'intérieur de Spyder et depuis l'invite Anaconda. Il y a 3 autres lignes d'entrées, de l'intérieur de Spyder. Mais sont-ils pertinents ?? Le chemin vers les packages et les bibliothèques semble le même.


IPython \ extensions est probablement le plus important. Depuis Spyder, importez numpy , puis imprimez le numpy .__ file__ . Si le chemin contient IPython , nous saurons que nous avons trouvé le problème.


@AJNeufeld: OK, dans Spyder j'ai tapé import numpy , ligne suivante print (numpy .__ file__) , et le résultat était: C: \ ProgramData \ Anaconda3 \ lib \ site-packages \ numpy \ __ init__.py - ce chemin semble déjà être présent lorsque j'ai exécuté print (sys.path) à partir d'Anaconda Prompt.


Note ajoutée, juste au cas où quelque chose aurait été corrompu dans mon installation Windows7 Anaconda, j'ai désinstallé Anaconda, redémarré, supprimé manuellement quelques dossiers errants liés à Anaconda dans mon répertoire de base utilisateur, réinstaller Anaconda3, redémarrer. NON Changement de comportement.


3 Réponses :


0
votes

Je suis à peu près sûr (d'après les informations fournies dans l'erreur d'importation), que la seule chose à faire est d'importer Numpy avant d'importer des pandas. Vous pouvez le faire en changeant les lignes 22 et 21.


6 commentaires

Le script s'exécute correctement depuis l'intérieur de l'IDE Spyder, pourquoi serait-il "cassé" lorsqu'il est appelé à partir de la ligne de commande Windows?


Cela ne devrait pas faire de différence. L'ordre d'importation n'a vraiment pas d'importance.


@ Tomothy32 C'est important car, dans ImportError, cela montre que Pandas a besoin de la dépendance de Numpy, donc vous pouvez obtenir cette dépendance en changeant les lignes.


@TomH Peut-être que Spyder IDE a déjà la dépendance de Numpy afin que Pandas puisse fonctionner correctement


@ArnavPoddar Je pense que vous avez fondamentalement mal compris les importations. Les importations concernent le fichier actuel. Ouvrez un nouveau fichier / une fenêtre interactive, saisissez import pandas as pd , et cela fonctionnera si toutes les dépendances sont installées . Les dépendances ne doivent pas être importées.


Oh tirez désolé. Merci pour la clarification



0
votes

Avez-vous au moins essayé conda install numpy car il semble que votre installation Anaconda n'inclut pas numpy. (Quelqu'un peut-il transformer cela en commentaire? Merci.)


1 commentaires

"numpy", "numpy-base", "numpydoc" sont déjà installés. Désolé, cette réponse n'est pas formatée correctement et est difficile à lire: (base) C: \ Users \ th> conda list # packages dans l'environnement à C : \ ProgramData \ Anaconda3: # # Nom Version Build Channel [snipped] numpy 1.15.4 py37h19fb1c0_0 numpy-base 1.15.4 py37hc3f5095_0 numpydoc 0.8.0 py37_0



1
votes

Votre fichier de commandes doit ressembler à ce qui suit si vous voulez qu'il fonctionne:

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

J'espère que cela vous aidera ...


2 commentaires

Jonathan - CELA MARCHE! Merci beaucoup. Je n'aurais jamais deviné cela en cent ans. Pouvez-vous expliquer POURQUOI cela fonctionne? (Je vous ai donné un vote "up" mais il n'apparaît pas, car je n'ai pas une "réputation" suffisante)


Bienvenue @TomH Oui avec quelques essais et erreurs. Je pense qu'il existe des problèmes liés aux chemins et que vous devrez donc spécifier tous les chemins exécutables spécifiquement.