jco*_*ctx 0 python import client-server packages package
如果我正在开发一个客户端 - 服务器应用程序并且有3个文件(client.py,server.py和common.py,)并且common.py具有有用的功能(例如normalize()),那么客户端和服务器都可以轻松地执行以下操作:
from common import *
url = normalize(url)
Run Code Online (Sandbox Code Playgroud)
但是,如果出于各种奇怪的原因,我宁愿拥有单独的子目录(client,server和common),并且每个函数都有自己的文件,似乎没有类似的快捷方式.
我必须摆弄sys.path,然后在导入后我需要使用url=normalize.normalize(url).我确信我可以编写一个解决方法,但是我已经不知道有一些Pythonic处理这种方法吗?
更新:以下是按照Ignacio的建议完成后的方法:
$ 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)
Run Code Online (Sandbox Code Playgroud)
结果:
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/')
Run Code Online (Sandbox Code Playgroud)