2012-07-25 6 views
2

J'utilise Python 3.2 (à la fois pour construire et exécuter), et voici ma question.Python ne détecte pas les fichiers .pyc

Je l'intention d'expédier ma demande python avec la configuration suivante:

Il y a un script principal (par exemple, Main.py), qui utilise un module compilé, par exemple Module1.pyc). Pour être précis, la structure du répertoire est:

.\Main.py 
.\__pycache__\Module1.cpython-32.pyc 

Lorsque j'utilise l'interpréteur Python pour exécuter le script principal, il ne parvient pas à trouver le module avec l'erreur suivante:

Traceback (most recent call last): 
    File "Main.py", line 10, in <module> 
    import Module1 
ImportError: No module named Module1 

Remarque que j'ai ajouté le répertoire courant à la variable d'environnement PYTHONPATH, et fait partie de sys.path. En outre, le répertoire interne __pycache__ est également ajouté et est visible dans sys.path.

Vous ne savez pas pourquoi Module1 est introuvable. Je devine, il pourrait être en raison du nom de fichier différent - Module1.cpython-32.pyc? Mais alors, c'est ainsi que l'interpréteur Python 3.2 le génère.

+0

Assurez-vous que vos noms de fichiers sont les mêmes. Vous indiquez initialement que le nom du module est 'Module1', et que vous l'affichez à partir de votre structure dir. Ensuite, vous importez 'Module' et parlez d'un nom de fichier différent. Il est donc difficile de savoir si c'est juste parce que vous avez mal tapé le nom du module ou si c'est incorrect. –

+0

Désolé, c'était juste une faute de frappe. Les noms de fichiers sont cohérents. –

Répondre

9

Jetez un oeil à PEP-3147. Ils décrivent comment fonctionne le mécanisme de recherche python.

enter image description here

Donc, dans votre cas concret: Mettez directement le fichier Module1.pyc dans le dossier racine.

+0

J'ai essayé de copier Module.cpython-32.pyc dans le même dossier, mais là encore, il échoue. Maintenant, parce que le nom de fichier a 'cpython-32'. dans le cadre de celui-ci. Si je renomme le fichier en Module.pyc, cela fonctionne comme un charme. –

+0

Alors que cela résout juste le problème, il faut encore une étape de renommer les fichiers pyc. Existe-t-il un moyen de contrôler les noms de fichiers pyc créés? –

+0

Jetez un oeil sur le module 'compileall', cela pourrait être ce que vous cherchez ... (' compileall.compile_dir') – gecco

2

Comme il est indiqué ci-dessous, à deux pas résolu la question: Étape 1:. Copiez le fichier Module.cpython-32.pyc de .__ répertoire pycache__ à \ Etape 2: Renommer le fichier à Module.pyc

PS: Merci à gecco pour avoir partagé les détails.

+0

Astuce: Votre réponse ne répond pas à votre question (Pourquoi pyc pas trouvé): Votre réponse pourrait être down-voté par les utilisateurs graves SO ... – gecco

+1

@gecco, il existe deux parties pour résoudre ce problème, que j'ai mentionné ci-dessus. Sauf si les deux étapes sont effectuées, cela ne fonctionne pas. L'organigramme que vous avez partagé concerne l'étape 1. Donc, je ne sais pas pourquoi cela devrait être rejeté. Parce que, je viens d'essayer, et trouvé les deux étapes sont nécessaires pour le faire fonctionner –

+0

Autant que je peux lire dans votre question, vous n'avez nulle part demandé comment obtenir à partir de './__ pycache __/Module.cpython-32.py' à './Module.pyc'. Vous avez demandé pourquoi cela n'a pas fonctionné et comment y remédier: Les deux réponses sont fournies dans ma réponse ... – gecco

Questions connexes