如何使用一个命令/ import从解释器运行一堆导入和路径追加?如果我导入另一个为我运行命令的模块,则导入在主命名空间中不可用。与运行修改/添加命令和变量到当前会话的bash脚本类似。
离。
import os, ...
sys.path.append(...)
答案 0 :(得分:1)
如果我理解正确,你只是在寻找from … import …
声明。例如:
lotsostuff.py:
import json
def foo(): pass
现在:
$ python3.3
>>> from lotsostuff import *
>>> json
<module 'json' from '/usr/local/lib/python3.3/json/__init__.py'>
>>> foo
<function lotsostuff.foo>
但是,您可能需要考虑其他替代方案。如果您只是想控制解释器会话的启动,则可以执行以下操作:
$ PYTHONSTARTUP=lotsostuff.py
$ python3.3
>>> json
<module 'json' from '/usr/local/lib/python3.3/json/__init__.py'>
>>> foo
<function __main__.foo>
注意最后一行的差异。您现在正在lotsostuff
命名空间中运行__main__
,而不是在单独的命名空间中运行并抓取其所有成员。
类似地:
$ python3.3 -i lotsostuff.py
>>> json
<module 'json' from '/usr/local/lib/python3.3/json/__init__.py'>
如果您希望每次在会话中执行此操作,通常会使用PYTHONSTARTUP
-i
如果您只想这样做一次。
如果你想在会话中间而不是在启动时做同样的事情......好吧,你不能直接做,但你可以与exec
非常接近(Python 3.x) (或Python 2.x中的execfile
)。
如果你真的想完全你所描述的 - 导入模块,作为正常导入,除了合并到你的命名空间而不是它自己的 - 你需要自定义导入过程。 importlib
并不难。如果您不在Python 3.2或更高版本中,那么使用imp
可以完成更多工作。
在我认为您正在寻找的. ./foo
脚本中./foo
而不仅仅是bash
之间存在差异。
如果您使用的是ipython
,则可以选择更酷的选项。 (如果您没有使用ipython
,则可能需要查看它。)