Импорт скрипта Python завершается неудачно, если скрипт перемещается в подкаталог - PullRequest
1 голос
/ 20 ноября 2010

Это может быть мое собственное недопонимание того, как работает импорт и пути поиска Python, или проблема в упаковке пакета caldav.

Я настроил среду virtualenv с именем myproject

На верхнем уровне myproject у меня есть скрипт test.py, который содержит два импорта:

import lxml
import caldav

В этом каталоге я набираю:

python test.py

, и он работаетнормально, без проблем

Теперь я переместил скрипт в тест подкаталога и выполнил команду:

python test/test.py

Кажется, импорт lxml все еще работает.Ошибка импорта caldav со следующим исключением:

Traceback (most recent call last):
  File "test/test.py", line 34, in <module>
    main()
  File "test/test.py", line 29, in main
    exec ( "import " + modulename )
  File "<string>", line 1, in <module>
  File "/home/ec2-user/caldav2sql/myproject/test/caldav/__init__.py", line 3, in <module>
    from davclient import DAVClient
  File "/home/ec2-user/caldav2sql/myproject/test/caldav/davclient.py", line 8, in <module>
    from caldav.lib import error
ImportError: No module named lib

Я что-то здесь не так делаю?Должен ли я установить какой-то путь?

1 Ответ

3 голосов
/ 20 ноября 2010

Скорее всего, caldav находился в том же каталоге, что и test.py, поэтому, когда вы import, он работал нормально. Теперь, когда вы переместили test.py в подкаталог, ваш импорт не может его найти. Вы можете либо переместить caldav, либо установить PYTHONPATH.

Вы также можете изменить свой sys.path

Информация из учебного пособия по модулю Python: http://docs.python.org/tutorial/modules.html

Переменная sys.path представляет собой список строк, который определяет путь поиска интерпретатора для модулей. Он инициализируется путем по умолчанию, взятым из переменной среды PYTHONPATH, или из встроенного по умолчанию, если PYTHONPATH не установлен. Вы можете изменить его, используя стандартные операции со списком:

>>> import sys
>>> sys.path.append('/ufs/guido/lib/python')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...