然后你经过调查发现脚本里面要用到一个三方包,但对方的服务器可能装过也可能没装过,于是你在脚本运行初始阶段设置了一个逻辑:
if xxx_package is exist: import xxx start run codeelse: pip install xxx_package import xxx start run code然后你傻乎乎的调用了python的系统命令来执行包的安装操作,诸如os.system/os.popen/subprocess.Popen,发现并没有什么卵用,包确实执行安装了,但是代码初次运行的环境还是检测不到该包的存在,wtf?
经过一番分析发现,安装发生在脚本启动之后,上述安装方法并不会将新安装的包同步至当前的运行过程中,因为python脚本是在启动之初就将import的包导入当前内存中的,也就是说我们新安装的并没有被热更新过来,归根结底是因为动态装包的姿势不对,下面给出动态装包的代码示例,重点在于install函数部分,当年我可是在这个坑了待了好久才出来,说多了都是泪!_!:
import pipdef install(package): if hasattr(pip, 'main'): pip.main(['install', package]) else: pip._internal.main(['install', package])# Exampleif __name__ == '__main__': try: import xxx print('Yeah, the package is here, ready go') # todo run main code except ImportError: print('oh no, it seems like you must install this package then you can use it') install('xxx') # todo run main code4. 写在最后
至此,你已经基本领略了 Python 装包 99% 以上的姿势,可以开开心心的 coding 了 。如果你上面的都看完了,那么可以看下我一开始就想推荐的一篇文章,有点老,但通过了解python包管理工具的历史你对上述内容的理解会更深刻,同时又能体会到今天的世界是多么的美好 。
Python 包管理工具解惑 [3]
当然,对于“包无法安装”这个问题,如果你还有其他更好的解决方案,或者对本文章有批评、指正或疑虑的地方,可在评论中指出,以便于我更新改正,谢谢大家 。
推荐阅读
- 川茶韵味,佛道之心
- 破译百度SEO快排刷参模拟点击发包秘籍
- 梦见自己的丑事所有人都知道了 梦到自己的丑事被发现
- Redis安装与使用之Java连接Redis
- 脚本语言,node在前端都有什么作用?
- 帆布包洗后发黄怎么办 帆布包一般怎么清洗
- 职业规划|到处都是招聘海员的信息,为什么不愿意去做海员?原因可不简单
- 穿衣搭配|《没有工作的一年》定档,辣目演绎都市隶人,万鹏诠释职场萌新
- 四川各界茶人共聚 宜宾早茶成都飘香
- 穿衣搭配|短发的张敏精神奕奕,中年穿休闲装挺有格调,看得出保养不错