Как импортировать папку lib внутри модулей

У меня было приложение GAE, которое содержит три модуля и папку lib. Когда я попытался импортировать стороннюю библиотеку из папки lib. GAE выдает команду ImportError.

Я мог бы заставить его работать, символизируя ./lib ./Module_1/lib и ./Module_2/lib, а также создавая appengine_config.py в каждом из модулей. Но делать это казалось действительно грязным.
Есть ли более чистый способ импорта app_root / lib из модулей_1 и module_2?

Это казалось многообещающим ( https://cloud.google.com/appengine/docs/python/config/appconfig#Python_app_yaml_Includes ), но не знаю, что добавить в include.yaml.

-- App Root/ -- Module_1/ module_1.yaml module_1.py -- Module_2/ module_2.yaml module_2.py -- lib/ -- cloudstorage/ .. -- 3rd_library_1/ .. .. -- 3rd_library_2/ .. .. appengine_config.py main.py (default module) app.yaml(default module) queue.yaml dispatch.yaml 

В модуле_1.py или module_2.py, когда я это делаю

  import cloudstorage as gcs 

Он жалуется

  ImportError: No module named cloudstorage 

Однако, когда он импортируется в main.py, он работает нормально.

В appengine_config.py:

 import os import sys # Add ./lib to sys path sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'lib')) 

Также попытался распечатать sys.path с main.py:

 sys.path in main.py : [ '/base/data/home/apps/s~my-app/2.381942946570489905', '/base/data/home/apps/s~my-app/2.381942946570489905/lib', ... ... ] 

sys.path в модуле_1.py:

  [ '/base/data/home/apps/s~my-app/module_1:2.381942955973772449', '/base/data/home/runtimes/python27/python27_dist/lib/python27.zip', ... ... ] 

One Solution collect form web for “Как импортировать папку lib внутри модулей”

Кредит отправляется представителю Tech Solutions компании Google Cloud Platform:

Документация модулей не может быть явно указана, но папка «Module1», «Module2», а также модуль по умолчанию фактически выполняются внутри отдельных виртуальных сред Python в отдельных экземплярах и должны быть автономными. Они не могут «видеть» какие-либо каталоги над ними, которые существуют в локальной файловой системе, а «default.py» не может видеть ничего в каждом из каталогов модулей. Все дерево папок не копируется в каждый экземпляр модуля.

Он предположил, что вместо создания символических ссылок просто скопируйте ./lib в каждый из модулей.

Мне не очень нравится идея.

Во-первых, эти модули имеют некоторый базовый класс, дублирование их на самом деле является анти-шаблоном.

Во-вторых, копирование папок lib повсеместно развращает модульные тесты, поскольку нос будет пытаться запустить все тестируемые единицы, которые он может запустить, также потому, что больно явно исключать каталоги.

В конце дня я написал make-файл, чтобы облегчить развертывание / тестирование …

 # Create simlinks before deployment. deploy: mksimlnks appcfg.py --oauth2 update $(CURDIR)/app.yaml appcfg.py --oauth2 update $(CURDIR)/MODULE_1/module_1.yaml appcfg.py --oauth2 update $(CURDIR)/MODULE_2/module_2.yaml appcfg.py --oauth2 update_queues $(CURDIR) mksimlnks: ln -s $(CURDIR)/lib $(CURDIR)/MODULE_1/lib ln -s $(CURDIR)/lib $(CURDIR)/MODULE_2/lib # Need to remove symlinks before unittest # or unit test will explode. test: rmsimlnks nosetests --exclude-dir=lib --with-gae -w $(CURDIR) --with-coverage --cover-html # Remove all symlinks rmsimlnks: rm -rf $(shell find * -type l) # remove symlinks and other stuff clean: rmsimlnks rm -f $(shell find * -name *.pyc) rm -f $(shell find * -name .DS_Store) rm -f .coverage rm -rf $(CURDIR)/cover 
  • import _socket: "Ошибка импорта: ошибка загрузки DLL"
  • Создание частичных подмножеств в Python
  • преобразовать фрейм данных python в список
  • отправлять почту с помощью python
  • Как объединить несколько dicts, суммируя значения общих ключей (и сохраняя значения со значением 0) в Python?
  • Что делает функция slice () в Python?
  • В python есть способ создать массив ND из цикла for, который выводит на один массив каждую итерацию?
  • Какова максимальная длина имени атрибута в python?
  • Python - лучший язык программирования в мире.