Я думаю, что вместо from pack1.mod2
вы действительно хотите сказать from lib.pack1.mod2
.
Редактировать: и, указав, какая версия Python это поможет, семантика импорта постепенно улучшалась с годами!
Редактировать: Ага! Спасибо за ваш комментарий; Теперь я понимаю. Вы пытаетесь переименовать библиотеки, не заходя в них и исправляя тот факт, что их имя теперь другое. Проблема в том, что то, что вы делаете, к сожалению, невозможно. Если все библиотеки использовали относительный импорт внутри, то у вас может быть шанс сделать это; но, увы, относительный импорт является (а) недавним и (б) широко не используемым.
Итак, если вы хотите использовать библиотеку p
, вам нужно будет поместить ее в корневой каталог, а не в lib/p
, потому что это создаст библиотеку с другим именем: lib.p
, которая собирается сильно удивить библиотеку и сломать ее.
Но у меня есть еще две мысли.
Во-первых, если вы пытаетесь сделать это для организации ваших файлов, а не потому, что вам нужны разные имена для импорта, то (а) создайте lib
, как вы делаете, но (б) не делайте не положить __init__.py
внутрь! Вместо этого добавьте каталог lib
в PYTHONPATH
или, внутри вашей программы, в sys.path
. (Позволяет ли GAE делать что-то подобное? У него есть PYTHONPATH
?)
Во-вторых, я лгу, когда говорю, что это невозможно. Строго говоря, вы, вероятно, могли бы сделать это, добавив запись в sys.metapath
, которая перехватывает все поиски модулей и пытается захватить их из lib
, если они там существуют. Но - блин.