Pycharm interactif de la console ne fonctionne pas
Je suis nouveau sur le python et Pycharm. Donc, s'il vous plaît ne hésitez pas à nous signaler où j'ai fait de mal et comment je peux résoudre le problème.
Le problème est que IPython ne peut pas importer les fonctions que je veux exécuter comme d'habitude.
Même après que le fichier python fonctionne, je ne peut pas importer les fonctions de ce fichier dans la console IPython. D'ailleurs il n'y a pas de complétion de code dans la console IPython.
Par exemple, j'écris un fichier python nommé student.py
, qui-je définir une classe nommée student
. Puis-je exécuter ce fichier. Mais console IPython, dit-catégorie "étudiant" n'est pas défini, quand je tape student('Jack', 28)
dans la console.
class student(object):
def _init_(self, name, age):
self.name=name
self.age=age
Ce qui me rend confus, c'est que je peux exécuter le fichier. Mais quand je tape student('Jack', 28)
dans la console, console IPython dit
Traceback (most recent call last):
File "/Library/Python/2.7/site-packages/IPython/core/interactiveshell.py", line 3032, in run_code
exec(code_obj, self.user_global_ns, self.user_ns)
File "<ipython-input-2-483e7a488507>", line 1, in <module>
student('Jack',28)
NameError: name 'student' is not defined
Qui plus est, IPython Magic Function
aussi ne fonctionne pas dans IPython console.
In[3]: %run student.py
ERROR: File `u'student.py'` not found.
Désolé pas de photos pour rendre les situations plus claire à cause de pas assez de réputation.
Sûrement, je l'ai mise à jour de ma description du problème
Avez-vous essayé le "run-m de l'élève" ?
J'ai essayé, mais ça n'a pas trop de travail. J'type
run -m student
, il s'est avéré que u'student' is not a valid modulename on sys.path
OriginalL'auteur Jason | 2015-03-29
Vous devez vous connecter pour publier un commentaire.
Il dépend de la façon dont vous exécuter le fichier python. Il ya beaucoup de façons de le faire que de l'intérieur pycharm (peut-être même trop).
Je devine ce que vous faites est en appuyant sur le triangle vert. Cela ne veut pas exécuter le fichier dans le même shell qui existe dans la "Console Python" de l'onglet en bas. Au lieu de cela, il donne naissance à un nouveau shell, exécute le fichier, et par défaut, ferme la coque lorsque le fichier est effectuée en cours d'exécution. Vous pouvez voir cette coquille de le faire dans le " Run " de l'onglet en bas. Il semblerait, d'après Shivendra de répondre qu'il y a peut être un moyen d'éviter de tuer le shell script sortie. Si c'est effectivement le cas, vous seriez à l'aide d'un terminal /shell qui reste dans le " Run "de l'onglet et pas l'un dans la "Console Python'.
Ceci est très similaire à ce qui se passe si vous utilisez de Débogage au lieu de l'Exécuter. Il donne naissance à un interprète, s'attache le débogueur, exécute le script, tue tout quand c'est bien fait. Cette vie dans le 'Debug'.
La façon la plus simple d'obtenir ce que vous avez à l'esprit serait d'exécuter le fichier dans le pré-existantes "Python Console', comme suit. Dans ce cas, le script est exécutée comme si elle était
__main__
, donc si vous avez unif __name__ == "__main__":
, il serait évaluée à True et tout le code dans le si le bloc sera exécuté. (Plus sur cela plus tard, si vous ne savez pas ce qu'il est maintenant)Ma manière préférée de "lancer" un fichier est de les importer à partir de l'intérieur de la "Python Shell' (IPython ou autre) lui-même et manuellement exécuter n'importe quel code d'initialisation doit être exécuté. Cela a l'avantage de ne pas trop polluer l'espace de noms et de présenter un environnement qui est beaucoup plus proche de ce que vous attendez si vous utilisez le script en tant que module (qui est l'endroit où pycharm et IPython et l'auto-complétion vraiment commencer à rembourser). Dans les deux méthodes, vous avez la possibilité d'attacher le débogueur 'Python Console interprète à l'aide de la "Attacher le Débogueur' icône à côté de l'interpréteur de commandes (le vert de bug).
Un court exemple est comme suit (dans la Console Python' onglet):
En essence, vous ne seriez pas en exécutant le fichier en tant que tel, cependant, de sorte que vous devez être conscient de ce que vous faites.
Lorsque vous exécutez un fichier python, le module pense que c'est
__name__
est"__main__"
, et c'est l'origine de laif __name__ == "__main__":
truc (ce qui est quelque chose que vous devriez vraiment regarder jusqu'au début du python processus d'apprentissage). Si vous essayez ensuite de suivre l'exécution du code, l'interprète exécute tout dans le module qui n'est pas une classe ou d'une fonction. Cela comprend laif __name__ == "__main__":
condition que vous verrez dans de nombreux scripts python. Le contenu de laif
bloc, n'est effectuée que si le script est exécuté par lui-même (ou en utilisant le module m dans IPython)D'autre part, lors de l'importation d'un module, la même séquence d'exécution se produit, sauf pour le fait que
if __name__ == "__main__":
donnera des Faux et tout le code qui résident dans ce bloc ne sera pas appelé. Vous devez donc exécuter manuellement ce qui est dans leif __name__ == "__main__":
bloc si vous en avez besoin. Un modèle commun pour simplifier la tâche est simplement d'avoir un minimum d'appel de fonction dans le bloc if (ou, si vous vous souciez arguments de ligne de commande, juste la poignée de ceux là), puis les mains de la majorité de l'exécution à celui d'un callable fonction:Dans le cas où vous ensuite d'importer le module, mais ont besoin pour exécuter ce code, de toute façon, tout ce que vous devez faire est d'appeler la fonction main (). Dans l'exemple ci-dessus, ce que je ferais (si j'avais à exécuter du code lorsque le module "court") ressemblerait à quelque chose comme :
Pycharm a quelques autres plus exotiques les moyens de l'exécution de code (pour l'exécution de seulement un petit fragment d'un fichier), je n'en ai pas vraiment besoin, alors je ne sais pas trop comment ils avaient de travail.
run -m student
niimport student
n'a pas de travail. IPython ditu'student' is not a valid modulename on sys.path
pourrun -m
méthode etNo module named student
pourimport
méthodeVérifiez dans paramètres > Construire, l'Exécution, le Déploiement > Console > Console Python. Vous devriez avoir quelque chose comme
sys.path.extend([WORKING_DIR_AND_PYTHON_PATHS]
dans le script de démarrage. J'utilise celui par défaut (j'espère - ne me souviens pas de le changer) d'ajouter du contenu de la racine à la PYTHONPATH sélectionné, et afin d'être en mesure d'importer de l'étudiant ou de l'exécution des m étudiant ou qu'avez-vous, student.py doit exister dans le répertoire racine de votre dossier ou un paquet (dossier avec init.py) a appelé l'étudiant doit exister dans la racine du projet.Si l'étudiant est dans un sous-dossier, vous devez l'importer avec son chemin relatif à partir de la racine du projet. Si la structure de votre fichier est
<projectname>/somedirectory/student.py
, vous devriez être en utilisantimport somedirectory.student as student
ourun -m somedirectory.student
. J'attendssomedirectory
va être un paquet, c'est à dire, doit avoir un__init__py
fichier (vide)Merci pour l'an suggestions. J'ai corrigé le
run -m
problème. Qui peuvent en résulter il y a un dossier nommé en Chinois dans le chemin destudent.py
. Cependant, aprèsrun -m student.py
avec succès, j'typestudent('Amy', 12)
, IPython console ditobject() takes no parameters
. Alors que je peux exécuter le fichier dans ipython qt-console.Vérifiez votre code et les espaces de noms. Très probablement, vous utilisez les espaces de noms de façon incohérente quelque part.
OriginalL'auteur Chintalagiri Shashank
Pour le maintien de objets/classes/fonctions/variables même après l'exécution, vous devrez modifier l'Interprète Option dans
Run> Edit Configuration> Interpreter Option
,vous devez ajouter
-i
. Je ne sais toujours pas sur la complétion de code dans la console.Run> Edit Configuration> Interpreter Option
, mais je ne savais pas où ajouter-i
. Pourriez-vous expliquer que de plus en plus explicitement?J'ai trouvé
Interpreter Option
et le type-i student.py
. Mais ça ne fonctionne pas.type de
-i
et puisapply
et exécuter votre code comme d'habitudemerci. c'est exactement ce dont j'avais besoin. Une question, que fait le "-i" option? et prend-il en effet de la performance de l'interprète?
Il est synonyme de mode interactif. C'est un python en ligne de commande et non pas pycharm, de sorte qu'il fonctionne sur n'importe quel console/terminal.
OriginalL'auteur Shivendra