gpt4 book ai didi

Python 将 .py 部分文件合并为一个 .py 文件

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:06 24 4
gpt4 key购买 nike

我正在使用 python + splinter 进行浏览器自动化。我的结构是这样的

[root]
+--start.py
+--end.py
+--[module1]
| +--mod11area1.py
| +--mod12area2.py
| +--[module1_2]
| | +--mod121area1.py
| +--[module1_3]
| +--mod131area1.py
+--[module2]
+--mod21area1.py

start.py 设置浏览器的初始化和开启并且内部 modules.py 执行每个模块的操作然后,通过在这个 fasion 中附加内容,这个结构将在执行时合并到一个脚本中:

start.py
mod11area1.py
mod12area2.py
mod121area1.py
mod131area1.py
mod21area1.py
end.py

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

最佳答案

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

请注意,这不是好的做法,如果您遇到此问题,您可能最好使用一些替代解决方案(例如使用 https://docs.python.org/3/library/zipimport.html )

关于Python 将 .py 部分文件合并为一个 .py 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18380763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com