Как найти правильный каталог для импорта - PullRequest
0 голосов
/ 30 сентября 2010

Я пытаюсь протестировать некоторый код. Основной скрипт требует импорта из ряда подкаталогов. Структура скриптов такая (я отредактировал ее, чтобы было ясно, что dir1 и 2 - это подкаталоги сборки):

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

Примечание: не полное представление.

Мне сказали проверить SCRIPT2 через командную оболочку, перейти в каталог сборки и затем набрать:

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

Этот скрипт имеет оператор импорта:

from dir2.script3 import *

Script3 вызывает импорт из сценариев, которые находятся в одной или нескольких папках dir или subdir

Так что при запуске команды SET. , , (см. выше) Я не получаю вывод. Думая, что это проблема меня, а не кода, я скопировал dir2 в

C:\PROGRAM FILES\python264

выполнил те же инструкции в командной строке CMD, и я получил частичный вывод

Это говорит о том, что SET PYTHONPATH не работает должным образом в Windows XP.

Надеюсь, этот вопрос имеет смысл.

В ответ на запрос SLOTT - однако, прочитав его вопрос, я понял, что одной из проблем является то, что я не понял, что я на самом деле отправляю две команды

Обратите внимание, что в каталоге есть скрипт с именем node, html, который является подкаталогом parsers2, который является подкаталогом core и находится на том же уровне, что и 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>

Ответы [ 2 ]

1 голос
/ 30 сентября 2010

Команды set PYTHONPATH=C:\texttool1\build и dir1\script2.py должны работать идеально.Убедитесь, что вы

  • набрали их как две команды в одной консоли (или в одном пакетном скрипте)
  • используйте абсолютный путь к папке, содержащей модули

Кроме того, исполняемые сценарии часто пишутся таким образом, что они должны выполняться из каталога, в котором находится исполняемый файл.Попробуйте запустить «extract_section.py» в его каталоге, а не из родительской папки.

Кстати, верхний пакет обычно называют «основным», но код выполняет глобальный импорт из этого пакета (from core.parsers2.html.node import *).Или «ядро» содержится в другой упаковке?Может быть, это скорее локальный импорт (from .core.parsers2.html.node import *)?

0 голосов
/ 30 сентября 2010

Мне тоже не повезло с PYTHONPATH на XP. Возможно, вам потребуется указать относительный путь для вашего включения, или вы можете добавить каталог в syspath:

sys.path.append('biglongdirectory')

Настоятельно не рекомендуется, но ... вместо этого есть эта опция

...