程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何在代码中使 Python 包更新即时生效大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决如何在代码中使 Python 包更新即时生效?

开发过程中遇到如何在代码中使 Python 包更新即时生效的问题如何解决?下面主要结合日常开发的经验,给出你关于如何在代码中使 Python 包更新即时生效的解决方法建议,希望对你解决如何在代码中使 Python 包更新即时生效有所启发或帮助;

我有以下代码行:

from pip import main as pipmain

# initial installation
pipmain(["install","pyscenic==0.10.0"])
import pyscenic
pyscenic.__version__

# return 0.10.0
# Some large code here

# second installation
pipmain(["install","install","pyscenic==0.10.4"])
import pyscenic
pyscenic.__version__
# still return 0.10.0

# Another large chunk that required new version

我想在我的代码中即时升级 pyscenic 包。 但是正如我上面提到的,在第二次安装中,版本仍然没有改变。 我希望它会更改为 0.10.4。我怎样才能正确地做到这一点?

我也试过了,还是不行:

import os
import importlib
os.system('pip install pyscenic==0.10.0')
import pyscenic
pyscenic.__version__
os.system('pip install pyscenic==0.10.4')
import pyscenic
pyscenic.__version__
importlib.reload(pyscenic)
pyscenic.__version__

所有代码都在 IPython 上测试过(交互式)。 如果我退出 IPython 并重新输入,它将生效。 但这不是我想要的。

解决方法

正如之前的几个答案(1、2)和 recent requests 所提到的,pip 和 Python 的设计并没有真正考虑到这一点。

但是通过对 Python 名称系统的一些巧妙破解,以及对要使用的软件包的一些了解,您可以安装两个并排安装的版本:

# Copyright © 2021 Alexander L. Hayes
# MIT License

git clone git@github.com:aertslab/pySCENIC pySCENIC100
git clone git@github.com:aertslab/pySCENIC pySCENIC104

(
  cd pySCENIC100
  git checkout 0.10.0
  sed -i "s/pyscenic/pyscenic100/g" setup.py
  sed -i "s/pyscenic/pyscenic100/g" MANIFEST.in
  sed -i "s/pyscenic/pyscenic100/g" setup.cfg
  (
    cd src
    mv pyscenic pyscenic100
    (
      cd pyscenic100
      sed -i "s/pyscenic/pyscenic100/g" binarization.py
      sed -i "s/pyscenic/pyscenic100/g" __init__.py
      sed -i "s/pyscenic/pyscenic100/g" _version.py
    )
  )
  python setup.py install
)

(
  cd pySCENIC104
  git checkout 0.10.4
  sed -i "s/pyscenic/pyscenic104/g" setup.py
  sed -i "s/pyscenic/pyscenic104/g" MANIFEST.in
  sed -i "s/pyscenic/pyscenic104/g" setup.cfg
  (
    cd src
    mv pyscenic pyscenic104
    (
      cd pyscenic104
      sed -i "s/pyscenic/pyscenic104/g" binarization.py
      sed -i "s/pyscenic/pyscenic104/g" __init__.py
      sed -i "s/pyscenic/pyscenic104/g" _version.py
      (
        cd cli
        sed -i "s/pyscenic/pyscenic104/g" *.py
      )
    )
  )
  python setup.py install
)

这个 bash 脚本两次克隆存储库,检查版本 0.10.00.10.4,通过 sed 进行一些重命名,最后安装两个名为 pyscenic100 和 {{ 1}}:

pyscenic104

我不知道在“import pyscenic100 import pyscenic104 print(pyscenic100.__version__) print(pyscenic104.__version__) # 0.10.0+0.g3de37cb.dirty # 0.10.4+0.g436561f.dirty ”期间会发生什么,但看起来像是文档/测试工作中的示例:

# Some large code here
,

这不是安装软件包的首选方式,即在脚本中安装它们。即使在更新后,大多数软件包仍具有旧版本中的所有功能,并且由于您的版本更改很小,因此不应造成很多问题。

但是,如果您想在脚本中安装软件包,您可以使用您提到的 os.system,但在安装其他版本之前,请先删除以前的版本,然后就可以了。

如果这不能解决您的问题,那么您可以查看此代码。这应该可以解决您在脚本中安装和卸载软件包的问题。

import subprocess
import sys

def install(package):
    subprocess.check_call([sys.executable,"-m","pip","install",package])

def uninstall(package):
    subprocess.check_call([sys.executable,"uninstall",package])

请告诉我它是否有效

,

如果可以,一个简单的解决方案是编写一个按顺序运行两个 python 文件的 bash 文件,并使用 pip 在两个 python 运行之间更改包 pyscenic 的版本。您可以执行类似于 this 的操作,例如:

#!/usr/bin/env bash
pip install pyscenic==0.10.0
python first_script.py
pip install pyscenic==0.10.4
python second_script.py

大佬总结

以上是大佬教程为你收集整理的如何在代码中使 Python 包更新即时生效全部内容,希望文章能够帮你解决如何在代码中使 Python 包更新即时生效所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: