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:
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']
C:\Windows\system32> "%programdata%\Anaconda3\python.exe" "B:\IcCharData\B1505_Process_Data_20190214.py"
3 Réponses :
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.
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
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.)
"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
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 ...
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.
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 \ extensionsest probablement le plus important. Depuis Spyder,importez numpy, puis imprimez lenumpy .__ file__. Si le chemin contientIPython, nous saurons que nous avons trouvé le problème.@AJNeufeld: OK, dans Spyder j'ai tapé
import numpy, ligne suivanteprint (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.