Если я разрабатываю клиент-серверное приложение и у меня есть 3 файла (client.py
, server.py
и common.py,
), а common.py
имеет полезную функцию (например, normalize()
), это легко сделать из обоихклиент и сервер должны сделать что-то вроде этого:
from common import *
url = normalize(url)
Однако, если по разным странным причинам я предпочел бы иметь отдельные подкаталоги (client
, server
и common
), и каждыйФункция имеет свой собственный файл, похоже, что подобного ярлыка не существует.
Мне нужно возиться с sys.path
, затем после импорта мне нужно использовать url=normalize.normalize(url)
.Я уверен, что мог бы запрограммировать обходной путь, но есть ли уже какой-то Pythonic способ обработки этого, о котором я не знаю?
Обновление: вот как я это сделал после следования совету Игнасиониже:
$ cat common/__init__.py; client/login.py jcomeauictx.myopenid.com
import os, sys
for module in os.listdir(os.path.dirname(__file__)):
print >>sys.stderr, 'module: %s' % module
name, extension = os.path.splitext(module)
if extension == '.py' and not name.startswith('_'):
importer = 'from %s import %s' % (name, name)
print >>sys.stderr, 'import statement: %s' % importer
exec(importer)
Результат:
module: __init__.py
module: normalize.py
import statement: from normalize import normalize
module: __init__.pyc
module: normalize.pyc
('http://www.myopenid.com/server', 'http://jcomeauictx.myopenid.com/')