如何仅在代码第一次运行时在 python 中运行函数?

Posted

技术标签:

【中文标题】如何仅在代码第一次运行时在 python 中运行函数?【英文标题】:How to run a function in python only first time the code is running? 【发布时间】:2021-11-22 02:45:49 【问题描述】:

我编写了一个函数来安装运行脚本所需的模块。我的问题是每次脚本运行时都会运行该函数。我只需要在脚本第一次运行时运行该函数,这样在安装模块后,该函数就不会在每次脚本运行时运行。

我的代码是

import importlib
import subprocess
import pkg_resources
import os, time, json, datetime, sys


def import_and_install(package):
    try:
       importlib.import_module(package)
    except (ModuleNotFoundError, pkg_resources.DistributionNotFound) as e:
       print("0 module is not installed.\n Don't worry.  will take care\n".format(package))
       package = [package]
       subprocess.check_call([sys.executable, '-m', 'pip', 'install'] + package)


packages = ['pandas', 'numpy', 'threading',  'xlwings']

for package in packages:
      import_and_install(package)



import pandas as pd
import threading
import xlwings as xw
import numpy as np   

【问题讨论】:

...那到底是什么问题呢?脚本是否尝试运行 pip 再次安装包? 是的,每次代码运行时都会尝试安装包。 从源代码中它只会尝试安装尚未安装的包。你最好先检查一下为什么导入会引发错误 @user202729 他们没有提到错误,只是不希望它每次都运行。 @Kemp 我的意思是如果 pip install 运行,那么导入必须引发错误。 【参考方案1】:

我不确定您所说的仅在第一次运行脚本时运行脚本是什么意思?

这是否意味着您只想在每台计算机/VM 上运行一次脚本?

从外观上看,您要运行的脚本似乎是用于处理依赖项和打包管理,如果是这种情况,我建议您使用包管理器,例如 Poetry(https://python-poetry.org/)。

如果您仍然坚持自己做所有事情。 我能想到的最简单的解决方案是创建一个文件,该文件存储一个标志,告诉您脚本是否已经运行。 但可能会有更好的解决方案

【讨论】:

以上是关于如何仅在代码第一次运行时在 python 中运行函数?的主要内容,如果未能解决你的问题,请参考以下文章

仅在“构建并运行”时在 Xcode 中运行 bash 脚本

如何在python中运行其他代码时在后台运行循环

c ++ vtk:hello world仅在发布时在运行时失败

如何使自定义标签中的代码块仅在第一次调用该标签时运行?

UIAlertController 中的 UIPickerView 仅在 iPhone 中正确时在 iPad 中给出错误?

如何修改模块中的变量和实例并在运行时在python中保存