Python将.py零件文件合并为一个.py文件

LIN*_*bee 2 python splinter

我正在使用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)

我的问题是,有更好的方法吗? 我对此很陌生,通常只创建一个脚本。由于我的项目不断扩大,因此我不得不雇用其他几个人来编写脚本。因此,我想出了这种方法。

ide*_*n42 5

不,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


Mut*_*amy -3

与其将内容附加到单个 *.py 文件中,为什么不直接从团队中其他人编写的代码中导入您需要的内容呢?