大佬教程收集整理的这篇文章主要介绍了如何在代码中使 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.0
和 0.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,请注明来意。