Текущий рабочий каталог больше не унаследован от вызывающего процесса начиная с версии 2.5? - PullRequest
3 голосов
/ 20 апреля 2009

Я обновил свою версию Python на сервере Windows 2003 с 2,4 до 2,5.

В версии 2.4 я мог импортировать файл «sub1.py» из подкаталога c: \ application \ subdir \ следующим образом:

import sub1

до тех пор, пока вызывающий скрипт main.py, который находится в c: \ application, был запущен так:

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

Но в 2.5 это больше не работает для меня:

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

Теперь я могу поставить пустой файл

__init__.py

в subdir и импортируйте так:

import subdir.sub1 as sub1

Произошло ли изменение в Python 2.5? Это будет означать, что текущий рабочий каталог в Python 2.4 был унаследован от вызывающего процесса, а в Python 2.5 он установлен там, где живет основной скрипт.

[Edit3] Я исправил вопрос сейчас. Я должен извиниться, что сначала я упростил пример и устранил причину, которая приводит к ошибке, без проверки моего упрощенного примера. [/ Edit3]

Ответы [ 5 ]

4 голосов
/ 20 апреля 2009

для импорта sub.py вам необходимо:

import sub      # not sub1
2 голосов
/ 20 апреля 2009

Вы можете проверить, где python ищет модули. Список местоположений содержится в переменной sys.path.

Вы можете создать простой скрипт (или выполнить его в интерактивном режиме), который показывает это:

import sys

for x in sys.path:
  print x

По умолчанию python будет искать каталог, в котором он выполняется, и где находится оригинальный скрипт.

Кроме того, попробуйте установить переменную среды PYTHONPATH для включения каталога.

1 голос
/ 20 апреля 2009

Вам необходимо внести следующие изменения:

  • превратить subdir в пакет, добавив пустой файл __init__.py в каталог
  • изменить импорт на: from subdir import sub1
1 голос
/ 20 апреля 2009

Я полагаю, sub1 это опечатка? В своем вопросе вы иногда ссылаетесь на sub, иногда на sub1.

Я бы прежде всего проверил, что файл sub.py существует в c:\application.

  • Проверьте разрешения для файла sub.py и каталога приложения. Может ли пользователь прочитать файл sub.py? Может ли интерпретатор python создать файл * .pyc?
  • Кроме того, вручную удалите файл sub.pyc, на случай, если старая версия pyc вызывает проблему.
0 голосов
/ 20 апреля 2009

добавьте этот каталог в ваш путь к Python

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...