如果使用包X的python脚本正在运行,而包X正在升级,那么会导致权限问题导致升级失败吗?
我使用Windows 10、Anacondav5.2运行在pythonv3.6和conda来更新包。
发布于 2018-12-26 18:33:26
虽然纯Python文件在导入时是在内存中编译的,而且在此之后源代码(几乎)不再相关,但这并不是故事的结束。
包可能具有延迟加载的额外资产,或者您的程序或其依赖项可能会按需加载依赖模块,因此,如果在升级期间运行,它可能会加载包/资源的意外版本,甚至是升级一半的包。
此外,本机(=仅限Python)模块-- Windows上的.pyd文件--是在导入过程中加载的dll。由于dll是在内存中映射而没有共享的,因此不允许在加载时替换它们,因此这可能会阻止相关包的升级。
发布于 2018-12-26 18:31:41
我刚才试过一个简单的测试。我运行了一个永久循环的python脚本。它用的是矮胖。然后,我尝试安装一个python包(py手电),它需要降级numpy版本。当脚本运行时,安装失败,其中包含一些“无权限”错误消息。在我停止脚本之后,安装成功了。
根据本实验的结果,建议在执行python包升级时停止所有python脚本。
发布于 2018-12-26 18:15:25
当您import
时,您将在RAM中创建包的本地实例以供运行。因此,升级包不应影响脚本的运行。
您可以查看from importlib import reload
,以便在脚本仍在运行时重新加载包。
https://stackoverflow.com/questions/53938886
复制