我正在使用python + splinter进行浏览器自动化。我的结构是这样的
[root]
+--start.py
+--end.py
+--[module1]
| +--mod11area1.py
| +--mod12area2.py
| +--[module1_2]
| | +--mod121area1.py
| +--[module1_3]
| +--mod131area1.py
+--[module2]
+--mod21area1.py
Run Code Online (Sandbox Code Playgroud)
start.py设置浏览器的初始化和打开,内部模块.py对每个模块执行操作,然后在执行时通过在此功能后面添加内容,将该结构合并到一个脚本中:
start.py
mod11area1.py
mod12area2.py
mod121area1.py
mod131area1.py
mod21area1.py
end.py
Run Code Online (Sandbox Code Playgroud)
我的问题是,有更好的方法吗? 我对此很陌生,通常只创建一个脚本。由于我的项目不断扩大,因此我不得不雇用其他几个人来编写脚本。因此,我想出了这种方法。
不,Python没有简单的方法将脚本合并到一个.py文件中。
但是您可以伪造它,尽管方式相当有限。
这里是一个示例,说明如何在单个文件中定义多个模块(每个模块都有自己的命名空间)。
但是具有以下局限性。
示例-2个模块,每个模块包含一个函数:
# Fake multiple modules in a single file.
import sys
_globals_init = None # include ourself in namespace
_globals_init = set(globals().keys())
# ------------------------
# ---- begin
__name__ = "test_module_1"
__doc__ = "hello world"
def test2():
print(123)
sys.modules[__name__] = type(sys)(__name__, __doc__)
sys.modules[__name__].__dict__.update(globals())
[globals().__delitem__(k) for k in list(globals().keys()) if k not in _globals_init]
# ---- end ------------
# ---------------------
# ---- begin
__name__ = "some_other"
__doc__ = "testing 123"
def test1():
print(321)
sys.modules[__name__] = type(sys)(__name__, __doc__)
sys.modules[__name__].__dict__.update(globals())
[globals().__delitem__(k) for k in list(globals().keys()) if k not in _globals_init]
# ---- end ------------
# ----------------
# ---- example use
import test_module_1
test_module_1.test2()
import some_other
some_other.test1()
# this will fail (as it should)
test1()
Run Code Online (Sandbox Code Playgroud)
请注意,这不是一个好习惯,如果您遇到此问题,最好使用其他替代解决方案(例如使用https://docs.python.org/3/library/zipimport.html)
| 归档时间: |
|
| 查看次数: |
2329 次 |
| 最近记录: |