pipenv install too slow

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jaket5219999/article/details/80265941

首先,已经换好源了:(如何用一行命令来换源请看:https://blog.csdn.net/jaket5219999/article/details/80815847

$ head -2 Pipfile
[[source]]
url = "https://mirrors.aliyun.com/pypi/simple"

换好源之后,pipenv安装还是有点慢,看了一下,发现主要是lock这一步耗时较长。

解决方案如下:

一、

安装时用:pipenv install --skip-lock python-package,  等到要部署或git push时再运行pipenv lock生成Pipfile.lock文件,例如

pipenv install --skip-lock django
pipenv lock

试了一下这个方法,安装明显快多,而且pipenv lock可以另开一个terminal来运行,整个过程就舒畅多了。

二、

在方法一的基础上,写一个脚本,install --skip-lock之后,自动在后台运行lock。

-----------------------------------------------------------------------------------------------------------

基于以上想法写了脚本增加速度:install时加上--skip-lock,然后开多一个进程在后台运行pipenv lock

系统是ubuntu18,vagrant下的config.vm.box = "ubuntu/bionic64"

结果:

$ time pipenv install django requests djangorestframework

real    0m26.462s
user    0m13.008s

sys     0m2.001s

$ time pii django requests djangorestframework

real    0m18.055s
user    0m5.469s

sys     0m1.132s

结论:提速了约30%,不过还是有点慢,静待kennethreitz继续给力。

代码如下:

cat ~/.bash_aliases
...
alias pii="~/.pipenv_install_while_lock_at_another_process.py"
...
cat ~/.pipenv_install_while_lock_at_another_process.py
#!/usr/bin/env python3.6
import os
import sys
from multiprocessing import Process


def subcmd(cmd):
    with os.popen(cmd) as f:
        f.read()


def main():
    os.system(f'pipenv install --skip-lock {" ".join(sys.argv[1:])}')
    cmd = "pipenv lock 2>&1 >/dev/null"   # 2>&1 >/dev/null 使得pipenv lock为静默运行
    p = Process(target=subcmd, args=(cmd,), daemon=True)  # 启动后台进程来运行命令
    p.start()


if __name__ == "__main__":
    main()

由于pipenv lock 2>&1 >/dev/null为静默运行,结果不会通知当前终端,所以过一段时间后,如果发现Pipenv.lock 未生成或者未更新,还需再手动运行`pipenv lock`

猜你喜欢

转载自blog.csdn.net/jaket5219999/article/details/80265941