2010-09-30 22 views
0

J'essaie de tester du code. Le script principal nécessite des importations provenant d'un certain nombre de sous-répertoires. La structure des scripts est comme ça (je modifié pour préciser que dir1 et 2 sont des sous-répertoires de construction):Comment rechercher le bon répertoire pour les importations

build 
    ascript.py 
    dir1 
    script2.py 
    dir2 
    script3.py 
    subdir1 
     script4.py 
     script5.py 
    subdir2 
     script6.py 
.   
. 
. 

Note: Pas une représentation complète.

On m'a dit de tester SCRIPT2 par shell de commande, passez dans le répertoire de construction et puis tapez:

SET PYTHONPATH="." python dir1/script2.py 

Ce scénario on a une déclaration d'importation:

from dir2.script3 import * 

Script3 appelle une importation de scripts qui se trouvent dans un ou plusieurs des dossiers dir ou subdir

Ainsi, lorsque vous exécutez la commande SET. . . (voir ci-dessus) Je n'ai pas de sortie. Pensant que cela est un problème de moi pas un problème de code que je copiais dir2 à

C:\PROGRAM FILES\python264 

administraient les mêmes instructions à l'invite CMD et j'ai une sortie partielle

Cela me dit que le SET PYTHONPATH ne fonctionne pas comme prévu dans Windows XP.

J'espère que cette question a du sens.

En réponse à la demande de SLOTT - cependant, après avoir lu sa question, je compris que l'un problème est que je ne comprenais pas que j'étais en fait de soumettre deux commandes

Remarque il y a un script appelé nœud dans le répertoire nommé html qui est un sous-répertoire de parsers2 qui est un sous-répertoire du noyau qui est au même niveau que exp

Microsoft Windows XP [Version 5.1.2600] 
(C) Copyright 1985-2001 Microsoft Corp. 

C:\Documents and Settings\burchkealey.UNO_CBA>cd c:\ 

C:\>cd c:\texttool1\build 

C:\texttool1\build>set pythonpath="." 

C:\texttool1\build>python exp/extract_section.py c:\testextract\c40545.htm 
Traceback (most recent call last): 
    File "exp/extract_section.py", line 4, in <module> 
    from core.parsers2.html.node import * 
ImportError: No module named core.parsers2.html.node 

C:\texttool1\build> 
+0

'SET PYTHONPATH =". "' Et 'python dir1/script2.py' sont deux commandes. Vous avez dit que c'était un. Qu'est-ce que ** précisément ** avez-vous tapé et que ** précisément ** avez-vous vu? Veuillez copier et coller l'ensemble de votre session de terminal Windows. –

+0

Je ne suis pas tout à fait sûr de la question, mais voici un lien vers la documentation: http: //docs.python.org/tutorial/modules.html#the-module-search-path – babbitt

Répondre

1

Les commandes set PYTHONPATH=C:\texttool1\build et dir1\script2.py devrait fonctionner parfaitement. Assurez-vous

Type
  • eux deux commandes dans la même console (ou dans un seul script batch)
  • utiliser le chemin absolu vers le dossier contenant les modules

De plus, les scripts exécutables sont souvent écrits de telle sorte qu'ils doivent être exécutés à partir du répertoire dans lequel se trouve l'exécutable. Essayez de démarrer "extract_section.py" dans son répertoire au lieu du dossier parent. Par ailleurs, il est inhabituel de nommer un paquet supérieur "core", mais le code effectue une importation globale à partir de ce paquet (from core.parsers2.html.node import *). Ou est "core" contenu dans un autre paquet?Peut-être que cela devrait plutôt être une importation locale (from .core.parsers2.html.node import *)?

+0

Merci beaucoup Il m'a fallu un heure pour arriver au point où j'ai compris que le problème était que je ne pouvais pas obtenir le chemin comme prévu. – PyNEwbie

+0

@PyNEwbie: Alors, quel était exactement le problème, alors? Le mauvais répertoire de travail? – AndiDog

+0

Je pense que c'était parce que l'interpréteur python cherchait seulement dans PYTHON264 pour les modules à importer. Le développeur qui travaille avec moi sur Linux et tout fonctionnait pour lui avant qu'il ne m'envoie le code et ne plante. Je suppose qu'il doit avoir son installation Python définie pour rechercher correctement les chemins appropriés. – PyNEwbie

0

Je n'ai pas eu beaucoup de chance avec PYTHONPATH sur XP soit. Vous devrez peut-être donner un chemin relatif pour votre inclure, ou vous pouvez ajouter le répertoire à la syspath:

sys.path.append('biglongdirectory')

Il est fortement déconseillé, mais ... à la place, il y a this option