首先,已经换好源了:(如何用一行命令来换源请看: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`