Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在代码中进行Python包更新以使其即时生效_Python_Pip - Fatal编程技术网

如何在代码中进行Python包更新以使其即时生效

如何在代码中进行Python包更新以使其即时生效,python,pip,Python,Pip,我有以下代码行: 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&q

我有以下代码行:

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
在那里,我想在代码中动态升级包。 然而,正如我上面提到的,在第二次安装中,版本仍然没有改变。 我希望它会变为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并再次进入,它将生效。
但这不是我想要的。

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

#/usr/bin/env bash
pip安装PyScientive==0.10.0
python first_script.py
pip安装程序=0.10.4
python第二脚本.py

这不是安装软件包的首选方法,即在脚本中安装软件包。即使在更新之后,大多数软件包都具有旧版本中的所有功能,并且由于您的版本更改很小,因此不会产生很多问题

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

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

导入子流程
导入系统
def安装(软件包):
子进程检查_调用([sys.executable,“-m”,“pip”,“install”,package])
def卸载(软件包):
子进程检查_调用([sys.executable,“-m”,“pip”,“uninstall”,package])

请务必让我知道它是否像前面的几个答案(,)和前面提到的那样有效,pip和Python在设计时并没有真正考虑到这一点

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

#版权所有©2021 Alexander L.Hayes
#麻省理工学院执照
git克隆git@github.com:aertslab/pySCENIC100
git克隆git@github.com:aertslab/pyscenetic104
(
cd pySCENIC100
git签出0.10.0
sed-i“s/pyscenet/pysceneic100/g”setup.py
sed-i“s/pyscenet/pysceneic100/g”MANIFEST.in
sed-i“s/pyscenet/pysceneic100/g”setup.cfg
(
cd src
mv pyscenic100
(
cd pyscenic100
sed-i“s/pyscenet/pysceneic100/g”二进制化.py
sed-i“s/pyscenet/pysceneic100/g”\uuuu init\uuuuuu.py
sed-i“s/pyscenet/pysceneic100/g”\u version.py
)
)
python setup.py安装
)
(
cd pySCENIC104
git checkout 0.10.4
sed-i“s/pyscenet/pysceneic104/g”setup.py
sed-i“s/pyscenet/pysceneic104/g”MANIFEST.in
sed-i“s/pyscenet/pysceneic104/g”setup.cfg
(
cd src
mv pyscenic104
(
cd pyscenic104
sed-i“s/pyscenet/pysceneic104/g”二进制化.py
sed-i“s/pyscenet/pysceneic104/g”\uuuu init\uuuuuu.py
sed-i“s/pyscenet/pysceneic104/g”\u version.py
(
cd cli
sed-i“s/pyscenet/pysceneic104/g”*.py
)
)
)
python setup.py安装
)
此bash脚本克隆存储库两次,签出版本
0.10.0
0.10.4
,通过
sed
进行重命名,最后安装两个名为
pyscenic100
pyscenic104
的库:

导入pyscenic100
导入pyscenic104
打印(pyscenic100.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu版本)
打印(pyscenic104.\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
#0.10.0+0.g3de37cb.脏
#0.10.4+0.g436561f.脏污
我不知道在“
#此处的一些大型代码
”期间会发生什么,但它看起来像是文档/测试工作中的示例:

来自pyscenic100.featureseq将功能导入为Feature100
从pyscenic104.featureseq导入功能作为Feature104
f1=Feature100.from_字符串('chr1 12 50 feature1 10.0+'))
f2=特征100。从_字符串('chr1 40 60特征2 10.0-')开始
打印(f1.与(f2)重叠)
#真的
f1=Feature104.from_字符串('chr1 12 50 feature1 10.0+'))
f2=特征104.从_字符串('chr1 40 60特征2 10.0-')开始
打印(f1.与(f2)重叠)
#真的

您可以使用
os.system('pip install pyscient==0.10.4')
第一个tho
导入操作系统
,这可以在windows上运行,不知道其他操作系统,这基本上运行给定的字符串cmd@Matiiss我试过了。第二个
pyscenet.\uuuuu版本\uuu
仍然给出0.10.0可能是它需要一段时间才能识别新的version@Matiiss如前所述,我希望它能即时生效,这样之后的代码的下一部分就可以使用0.10.4版了。即使您尽职尽责地
reload()
一切,它仍然不能保证绝对安全。我建议您在设计您的系统时,您可以在升级部分后重新启动系统。这更适合于评论,而不是回答。如“评论帮助”中所述,“评论用于要求澄清或指出帖子中的问题”。我认为我的回答并没有解决这两个问题,而是提出了一种解决斯坎德问题的方法。如果你有更多关于为什么我的答案应该是评论的信息,我很乐意阅读!关于所写的评论:在帖子中添加相关但次要或暂时的信息(例如,相关问题的链接,或向作者发出问题已更新的警告)。然而,在回答部分,它说:链接到外部资源是受鼓励的,但请在链接周围添加上下文,这样您的其他用户就会知道它是什么,以及它为什么存在。始终引用重要链接的最相关部分,以防无法访问外部资源或永久脱机。所以我猜你的帖子不值得投否决票really@Erwan我也试过了,但还是不行。请张贴工作example@scamander是的,哟