首页 > 编程语言 >python自动使用虚拟环境和安装依赖

python自动使用虚拟环境和安装依赖

时间:2023-06-16 18:01:24浏览次数:50  
标签:venv return 依赖 python sys 虚拟环境 install import

代码如下,Windows环境测试通过

import os
import platform
import re
import sys
from pathlib import Path


def is_venv() -> bool:
    """判断是否处于虚拟环境(也适用于poetry的)"""
    if hasattr(sys, "real_prefix"):
        return True
    return hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix


def run_and_echo(cmd) -> int:
    print("-->\n", cmd, flush=True)
    return os.system(cmd)


def install_and_rerun(*packages):
    py = Path(sys.executable)
    if not is_venv():
        if not (p := Path("venv")).exists():
            if run_and_echo(f"{py} -m venv venv"):
                return 1
        if platform.platform().lower().startswith("win"):
            py = p / "Scripts" / "python.exe"
        else:
            py = p / "bin/python"
    if run_and_echo(f"{py} -m pip install {' '.join(packages)}"):
        return 2
    cmd = f"{py} {sys.argv[0]} --no-install {' '.join(sys.argv[1:])}"
    return run_and_echo(cmd)


try:
    import kivy
except ImportError as e:
    if "--no-install" in sys.argv:
        raise e
    modules = re.findall(r"'([a-zA-Z_-]+)'", str(e))
    sys.exit(install_and_rerun(*modules))


def main():
    pass

if __name__ == '__main__':
    main() 

运行时,如果import失败,会判断是否处于虚拟环境,是的话,直接pip install报错的缺失包,然后自动重新执行脚本;

否则,判断当前路径是否有venv文件,有的话使用venv/*/python,否则使用python -m venv venv创建它

标签:venv,return,依赖,python,sys,虚拟环境,install,import
From: https://www.cnblogs.com/waketzheng/p/17486202.html

相关文章

  • Python - 方法参数中,带self和不带self的区别
    不带self该python文件中,没有类的概念。因此所有的方法参数中,没有self#文件名solution.pydefpartition(head:Optional[ListNode],x:int)->Optional[ListNode]:#...if__name__=='__main__':#注意这里的区别...partition() 如果未来要在其他类里......
  • python中parse的action = store_true含义
     我们在python脚本中经常看到action="store_true,如下图: parser.add_argument('--image',default=False,action="store_true",help='Imagedetectionmode,willignoreallpositionalarguments') 如果运行代码时加了   --image,那么im......
  • 用python生成正玄波信号源码解析
    一前记项目需要生成不同频点的正玄波信号,没找到现成的软件,只能自己写一个了。顺便温习一下python。 二源码解析:#!/usr/bin/pythonimportnumpyasnpfromscipyimportsignalimportwaveimportstructimportsysnum_samples=48000sampling_rate=48000.0ampl......
  • python configparser读取配置文件
    #coding:utf-8importconfigparserimportosimportjsonbase_path=os.path.dirname(os.path.abspath(__file__))conf_file=os.path.join(base_path,"config.ini")defread_config():#读取配置文件信息try:cf=configparser.ConfigParser()......
  • python 读取yaml配置文件
    #coding:utf-8importyaml#pipinstallpyyamlimportosimportjsonbase_path=os.path.dirname(os.path.abspath(__file__))conf_file=os.path.join(base_path,"db.yaml")defread_yaml():#读取配置文件信息try:f=open('db.yaml&#......
  • Python元组(tuple)和字典(dict)的合并使用
    Python包含6种数据类型,其中Number(数字)、String(字符串)、Tuple(元组)、 List(列表)、Dictionary(字典)、Set(集合);1.回顾Tuple(元组)的常用方法:Tuple的创建:tuple()方法创建,或者小括号的方式,有时也直接省略小括号a=tuple(range(10))b=tuple('hkd')c=tuple([1,2,3])PS:tuple()......
  • python测试系列教程——python+Selenium+chrome自动化测试框架
    需要的环境浏览器(Firefox/Chrome/IE…)PythonSeleniumSeleniumIDE(如果用Firefox)FireBug、FirePath(如果用Firefox)chromedriver、IEDriverServer、phantomjs.exeIDE(Pycharm/Sublime/Eclipse…)1、浏览器建议用Firefox或Chrome,千万不要用最新版本,要用早两到三个版本的。2......
  • Python使用HTTP隧道代码示例
    在本地代码中,嵌入隧道模式HTTP,HTTP模式:服务器端口账号密码,即可使用HTTP隧道代理来做访问#!-*-encoding:utf-8-*-importrequests#要访问的目标页面targetUrl="http://ip.hahado.cn/ip"#代理服务器proxyHost="ip.hahado.cn"proxyPort......
  • [数据分析与可视化] Python绘制数据地图3-GeoPandas使用要点
    本文主要介绍GeoPandas的使用要点。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoPandas。GeoPandas的官方文档地址为:GeoPandas-doc。本文主要参考GeoPandasEx......
  • 数据结构(Python版)——3、基本结构
    数据结构(Python版)——3、基本结构什么是线性结构LinearStructure线性结构是一种有序数据项的集合,其中每个数据项都有唯一的前驱和后继除了第一个没有前驱,最后一个没有后继新的数据项加入到数据集中是,只会加入到原有某个数据项之前或之后具有这种性质的数据集,就称为线性结构......