2009-04-20 6 views
3

J'ai mis à jour ma version python sur le serveur Windows 2003 de 2.4 à 2.5.Le répertoire de travail actuel n'est plus hérité du processus d'appel à partir de python 2.5?

2.4 Je pourrais importer un fichier "sub1.py" à partir d'un sous-répertoire c: \ Application \ subdir \ comme ceci:

import sub1 

aussi longtemps que le main.py de script appelant qui vit dans c: \ l'application a commencé comme ceci:

c:\application\subdir>python ..\main.py 

Mais dans 2,5, il ne fonctionne plus pour moi:

C:\application\subdir>python ..\main.py 
Traceback (most recent call last): 
    File "main.py", line 3, in <module> 
    import sub1 
ImportError: No module named sub1 

maintenant, je peux mettre un fichier vide

__init__.py 

dans subdir et l'importation comme ceci:

import subdir.sub1 as sub1 

Y avait-il un changement de Python 2.5? Cela signifierait que le répertoire de travail actuel dans python 2.4 a été hérité du processus appelant, et dans python 2.5, il est défini sur l'emplacement du script principal.

[edit3] J'ai corrigé la question maintenant. Je dois m'excuser d'avoir trop simplifié l'exemple au début et d'avoir supprimé la cause qui provoque l'erreur sans vérifier mon exemple simplifié. [/ EDIT3]

+0

S'il vous plaît garder la question et juste dire, que vous avez trouvé le problème et ce qu'il était ... Downvotes pour le texte comme "désolé j'ai supprimé la question" sont ok! – Gregor

+0

vous êtes intelligent mais le downvote était avant que je l'ai changé. c'était la raison pour laquelle je l'ai enlevé pour ne pas avoir plus de downvotes (parce que le downvoter nic n'a même pas pris la peine de commenter pourquoi il ou elle l'a fait c'est auto protection) – user89021

+1

Ouais, mais pour enlever la question n'est toujours pas la bonne façon! Je comprends que ce n'est pas correct si elles ont rejeté une bonne question. Ce serait plus facile si vous le laissez juste ... tout le monde obtient des downvotes sans raison. – Gregor

Répondre

1

Vous devez apporter les modifications suivantes:

  • tour subdir dans un paquet en ajoutant un fichier __init__.py vide dans le répertoire
  • changer l'importation: from subdir import sub1
4

à importer sub.py vous devez:

import sub  # not sub1 
+0

c'était une faute de frappe dans la question mais pas dans mon code d'origine. – user89021

0

ajouter ce répertoire à votre chemin python

+0

je pensais que je peux importer à partir du répertoire de travail actuel sans qu'il soit sur le chemin – user89021

2

Vous pouvez vérifier où les recherches de python pour les modules. Une liste d'emplacements est contenue dans la variable sys.path.

Vous pouvez créer un script simple (ou l'exécuter de manière interactive) qui montre ceci:

import sys 

for x in sys.path: 
    print x 

Par défaut, Python recherchera dans le répertoire dans lequel il est en cours d'exécution et où réside le script original.

Également, essayez de définir la variable d'environnement PYTHONPATH pour inclure le répertoire «. \».

+0

pour savoir que je devrais installer à nouveau 2.4 puis 2.5 à nouveau. j'espérais que quelqu'un connaisse un changement de 2.4 à 2.5 – user89021

+0

Vous pouvez vérifier cela sur votre installation 2.5. Vous devriez être capable de l'importer. Sinon, vous pouvez faire un test simple: créer un fichier a.py avec le contenu def foo(): imprimer foo puis exécuter python interactivement depuis le répertoire dans lequel il se trouve et taper: importer un puis un.foo() et vous devrait obtenir une impression. En outre, vous pouvez exécuter python en mode verbeux et vous obtiendrez plus d'informations: python -v backups.py. Juste pour être du bon côté, supprimez les versions compilées (* .pyc) – miha

1

Je suppose que sub1 est une faute de frappe? Dans votre question, vous faites parfois référence à sub, parfois à sub1.

Je vérifie tout d'abord que le fichier sub.py existe dans c:\application.

  • Vérifiez les autorisations du fichier sub.py et du répertoire de l'application. L'utilisateur peut-il lire le fichier sub.py? L'interpréteur python peut-il créer le fichier * .pyc?
  • De même, supprimez manuellement le fichier sub.pyc, juste au cas où une ancienne version du pyc est à l'origine du problème.
Questions connexes