python: install before import module

2016-04-08 12:18:24 +08:00
 ljk
try:
	import pkg
except Exception as e:
	subprocess.check_call("easy_install pkg".split())
    
import pkg

引入 module 之前,先安装,我是像上面这样做的。

问题是,第一次运行时, pkg 被安装了没错,可是安装完后的那句 import 却抛错了。

第二次运行时直接 import 成功。

所以 python 里面是不是有缓存 module 的机制?怎么刷新?

或者可以赐教一个优雅的 install before import 的方式吗?

(不想用 pip ,因为有些机器上没有装 pip ,相当于在安装模块之前又要安装 pip ,依赖太多)

4072 次点击
所在节点    Python
27 条回复
julyclyde
2016-04-08 15:08:59 +08:00
@halfcrazy 这可不能随便 sudo ,二是要密码,一是 sudo 和当前用户不是同一个用户,还不知道装到哪儿去了呢,说不定因为 PATH 不同,连 pip 都不是同一个
kaneg
2016-04-08 16:31:25 +08:00
同意 @kinghui 的说法,在代码里执行安装不确定的因素太多了:
* 没权限安装
* 防火墙阻止
* 安装的版本不兼容
等等
popbones
2016-04-08 16:40:48 +08:00
一个命令编译打包部署: Salt/Docker
Owenjia
2016-04-08 16:58:00 +08:00
如果安装时的包名和 import 的不一样呢?像 beautifulsoup 这种。
kamushin
2016-04-08 17:46:55 +08:00
如果是纯 Python 包是可以的. 但是带链接库的就不行了.
ry_wang
2016-04-08 18:59:22 +08:00
programmatically install 的方法,大胸弟你现在的选择是最不 programmatically install 的方法。说实话这么搞真不怕被队友打死么?

setup.py 或者用 ansible 部署, @ljk
Septembers
2016-04-09 16:09:00 +08:00
zipapp feature 是更好的选择

see https://docs.python.org/3/library/zipapp.html

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/269507

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX