python - 如何仅在代码第一次运行时在 python 中运行函数?
问题描述
我编写了一个函数来安装运行脚本所需的模块。我的问题是每次脚本运行时都会运行该函数。我只需要在脚本第一次运行时运行该函数,以便在安装模块后该函数不会在每次脚本运行时运行。
我的代码是
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
解决方案
我不确定您所说的仅在第一次运行脚本时运行脚本是什么意思?
这是否意味着您只想在每台计算机/VM 上运行一次脚本?
从外观上看,您要运行的脚本似乎是用于处理依赖项和打包管理,如果是这种情况,我建议您使用包管理器,例如 Poetry( https://python-poetry.org / )。
如果您仍然坚持自己做所有事情。我能想到的最简单的解决方案是创建一个文件,该文件存储一个标志,告诉您脚本是否已经运行。但可能有更好的解决方案
推荐阅读
- react-native - scrollToIndex 在 RTL FlatList React-Native 中不起作用
- tomcat - 使用 NGINX 的 Tomcat HA 集群设置
- php - PHP excel面临一些烦人的问题
- node.js - 本地主机上的连接被拒绝
- typescript - 如何在打字稿上声明类道具?
- nginx - Robots.txt 不应重定向到 HTTPS
- mysql - Docker + Mysql ConnectionError:未知的 MySQL 服务器主机 'db'
- asp.net-core - 无法在 ASP.NET Core MVC 中更新图像
- azure - 由于异常无法加载文件或程序集“Microsoft.ApplicationInsights”,应用服务突然停止工作
- inheritance - Kotlin 在类层次结构中静态和非静态访问成员的方法是什么?