# 文件:``offline.py``
with open('offline.py', 'w') as fo:
fo.write("host='129.168.0.1'")
# 另一份是线上测试环境 文件: `online.py``
with open('online.py', 'w') as fo:
fo.write("host='192.168.0.2'")
不同的环境需要加载不同的配置文件,这种情况就可以使用 __import__
来动态加载
import platform
if platform.uname().system == 'Darwin': # mac电脑
config = __import__('offline')
else:
config = __import__('online')
print(config.host)
192.168.0.2
├── conf
│ ├── __init__.py
│ ├── offline.py
│ └── online.py
from pathlib import Path
conf_dir = Path('conf')
conf_dir.mkdir(exist_ok=True)
# 文件:``offline.py``
with open(conf_dir/'__init__.py', 'w') as fo:
fo.write("")
with open(conf_dir/'offline.py', 'w') as fo:
fo.write("host='129.168.0.1'")
# 另一份是线上测试环境 文件: `online.py``
with open(conf_dir/'online.py', 'w') as fo:
fo.write("host='192.168.0.2'")
在 demo.py
脚本中,继续使用上一小节中的方法则需要修改 __import__
函数中的 name
。
import platform
if platform.uname().system == 'Darwin': # mac电脑
config = __import__('conf.offline')
else:
config = __import__('conf.online')
输出的结果是:
print(config)
<module 'conf' from '/home/jovyan/work/jupylab_xuzp/pt03_thinking/ch05_模块机制/conf/__init__.py'>
本意是导入不同的模块,或者 offline
或者 online
,
但实际导入的是 conf
模块,这与预期不符。这种情况下,需要使用 fromlist
参数。
import platform
if platform.uname().system == 'Darwin': # mac电脑
config = __import__('conf.offline', fromlist=('offline'))
else:
config = __import__('conf.online', fromlist=('online'))
程序输出结果:
print(config)
<module 'conf.online' from '/home/jovyan/work/jupylab_xuzp/pt03_thinking/ch05_模块机制/conf/online.py'>
├── conf
│ ├── __init__.py
│ ├── offline.py
│ └── online.py
在 demo.py
文件中根据系统来加载不同的模块,使用 import_module
方法的示例代码如下:
import platform
import importlib
if platform.uname().system == 'Darwin3': # mac电脑
config = importlib.import_module('conf.offline') # 绝对导入
else:
config = importlib.import_module('.online', package='conf') # 相对导入
print(config.host)
192.168.0.2
使用相对导入时,务必在 name
前面加一个点。