Включение и ссылки на сторонние библиотеки в проекте GAE - PullRequest
3 голосов
/ 24 августа 2011

Для моего проекта на gae python я бы хотел импортировать внешнюю библиотеку с именем 'vobject'.Как правильно импортировать его в мои файлы .py?

В файле readme говорится, что для его установки необходимо запустить

  python setup.py install

Кроме того, vobject требуется пакет dateutil.

Поскольку это будет работать на GAE, я решил скопировать обе библиотеки в свой проект вместо того, чтобы запускать скрипт установки, чтобы использовать его в своем коде.

Но я 'Я получаю кучу ошибок импорта, и я не уверен, какое правильное соглашение для внешних библиотек gae / python.

utc = dateutil.tz.tzutc()
## error produced:
File "myGaeProject/external/vobject/icalendar.py", line 47, in <module>
NameError: name 'dateutil' is not defined

Из-за того, как я структурировал свой проект, я изменил icalendar.pyструктура импорта из:

import dateutil.rrule
import dateutil.tz

в:

import external.dateutil.rrule
import external.dateutil.tz

Я также попробовал:

from external.dateutil import *

Какой правильный механизм импорта для проекта структурирован так:

-myGaeProject

--external
----__init__.py    

----dateutil
------__init__.py
------tz.py
------rrule.py
------[more dateutil files]

----vobject
------__init__.py
------base.py    
------icalendar.py    

--handlers
------__init__.py
------mainHandler.py

Ответы [ 3 ]

3 голосов
/ 26 августа 2011

Не изменяйте библиотеку.Если вы хотите поместить все свои библиотеки в external, вам нужно добавить external к вашему пути Python, прежде чем пытаться импортировать библиотеки оттуда:

import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), 'external'))
import some_external_library
1 голос
/ 24 августа 2011

Вы не можете сделать from external import dateutil, если во внешнем файле __init__.py отсутствует.

0 голосов
/ 24 августа 2011

Хорошим способом является использование zipimport, вы можете проверить проект jaikuengine, в этом много хорошего.

http://code.google.com/p/jaikuengine/source/browse/trunk/build.py

В Jaiku все внешние библиотеки хранятся в запасе.в каталоге vendor, но если вы видите app.yaml, все файлы в vendor пропускаются.Jaiku использует скрипт для создания zip-кода каждой библиотеки вендора и помещает его в корень проекта перед развертыванием или при запуске dev_server.

При этом вам не нужно исправлять путьиз ваших библиотек.

РЕДАКТИРОВАТЬ пример загрузки всех архивированных архивов В значительной степени вдохновлен jaikuengine :

def load_zipped(path='.'):
  for x in os.listdir(path):
    if x.endswith('.zip'):
      if not any([y.endswith(x) for y in sys.path]):
        sys.path.append(os.path.abspath('%s/%s') % (path, x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...