本文目录
3 高级用法
3.1 基于Pipfile创建虚拟环境
pipenv install
实际例子如下:
这里是先将当前的虚拟环境删除掉,然后重新创建虚拟环境,可以看到,重新创建后的环境跟删除之前的是一致的,不仅重新创建了虚拟环境,而且安装了Pipfile.lock里面相关的包,这对于进行环境迁移非常有用。
具体的方法:
(1)复制当前项目的Pipfile和Pipfile.lock到新的目录下。
(2)cmd进入到新的目录。
(3)使用pipenv install命令进行创建。
这个对于统一开发运行环境来说有很大的意义,整个团队的人员都使用相同的运行环境,那么很简单,就是把这个Pipfile和Pipfile.lock都提交到代码库中进行维护即可。
3.2 确定创建虚拟环境的目录
3.2.1 虚拟环境路径
默认的情况下,虚拟环境存放在python安装目录下,例如:D:\Python\workonhome
这样的方式,很大的好处是,跟项目源码分离,管理源码时,不受到虚拟环境相关文件的干扰。
虚拟环境目录是由环境变量“WORKON_HOME”来定义的。
在Windows下,cmd查看环境变量:
set WORKON_HOME
3.2.2 修改虚拟环境路径
如果不想放在默认位置,则修改这个变量即可。
一般来说,为了方便管理,最好是指定一个比较容易管理的位置。
需要注意的是,如果改动这个路径,之前的虚拟环境可能失效。
需要将之前的虚拟环境文件也迁移过去,否则会认为是新的虚拟环境。
只拷贝虚拟环境文件过去,还是会失效,报错如下:
需要处理这个问题,比较简单的方法是重建。
pipenv --rm
pipenv install
备选方案
当然,也可以尝试修改虚拟环境文件:activate.bat
修改内容:
@echo off
set "VIRTUAL_ENV=D:\Python\workonhome\venv001-mOgotQ4H"
if defined _OLD_VIRTUAL_PROMPT (
set "PROMPT=%_OLD_VIRTUAL_PROMPT%"
) else (
if not defined PROMPT (
set "PROMPT=$P$G"
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
set "_OLD_VIRTUAL_PROMPT=%PROMPT%"
)
)
if not defined VIRTUAL_ENV_DISABLE_PROMPT (
if "venv001" NEQ "" (
set "PROMPT=(venv001) %PROMPT%"
) else (
for %%d in ("%VIRTUAL_ENV%") do set "PROMPT=(%%~nxd) %PROMPT%"
)
)
REM Don't use () to avoid problems with them in %PATH%
if defined _OLD_VIRTUAL_PYTHONHOME goto ENDIFVHOME
set "_OLD_VIRTUAL_PYTHONHOME=%PYTHONHOME%"
:ENDIFVHOME
set PYTHONHOME=
REM if defined _OLD_VIRTUAL_PATH (
if not defined _OLD_VIRTUAL_PATH goto ENDIFVPATH1
set "PATH=%_OLD_VIRTUAL_PATH%"
:ENDIFVPATH1
REM ) else (
if defined _OLD_VIRTUAL_PATH goto ENDIFVPATH2
set "_OLD_VIRTUAL_PATH=%PATH%"
:ENDIFVPATH2
set "PATH=%VIRTUAL_ENV%\Scripts;%PATH%"
把这个地方改成新的路径:
set "VIRTUAL_ENV=D:\Python\workonhome\venv001-mOgotQ4H"
改为
set "VIRTUAL_ENV=E:\workonhome\venv001-mOgotQ4H"
同样的方法修改这些文件,替换路径为新路径:activate、activate.fish、activate.nu、
3.2.3 设置虚拟环境到当前项目跟目录下
但是在某些特殊情况下,如果需要将虚拟环境创建在项目的根目录下。
可以设置环境变量 PIPENV_VENV_IN_PROJECT,让pipenv将虚拟环境附加到项目根目录的 .venv 路径下。
set PIPENV_VENV_IN_PROJECT=1
查看如下:
当然,这种一般是特殊需要的时候这么干,如果是一般项目,不太建议用这种方法。
因为会把.venv包括到项目文件中,对于代码的提交和保管都不太方便。
进行恢复,去掉环境变量:PIPENV_VENV_IN_PROJECT
set PIPENV_VENV_IN_PROJECT=
设置为空,即可删除。
3.3 自定义镜像
pip的默认镜像是国外的镜像,有时候比较慢,需要自定义成国内的镜像。
3.3.1 安装时指定镜像
格式:pipenv install --pypi-mirror <mirror_url>
示例:
pipenv install requests --pypi-mirror https://pypi.tuna.tsinghua.edu.cn/simple/
3.3.2 修改Pipfile文件
直接修改Pipfile文件的url值:
[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "pypi"
[packages]
requests = "*"
[dev-packages]
[requires]
python_version = "3.7"
这个时候进行相关的包安装,使用的都是配置的pip源了。
Pipfile.lock文件中的pip源也会更新(这个是自动的):
{
"_meta": {
"hash": {
"sha256": "1ab3c5705a51db454d107dc642a8f4fc5d34e86e09d1d9b25c2588d718e6894d"
},
"pipfile-spec": 6,
"requires": {
"python_version": "3.7"
},
"sources": [
{
"name": "pypi",
"url": "https://pypi.tuna.tsinghua.edu.cn/simple",
"verify_ssl": true
}
]
},
3.3.3 配置多个pip源镜像
[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"
[[source]]
url = "https://pypi.tuna.tsinghua.edu.cn/simple"
verify_ssl = true
name = "tsinghua"
[packages]
requests = {version="*", index="pypi"}
numpy = {version="*", index="tsinghua"}
[dev-packages]
[requires]
python_version = "3.7"
这里配置了两个源,一个是pypi默认的,一个是清华大学的。
下面的包指定了特定的源,requests用的是默认源,而numpy用的是清华大学的。
通过这种配置,可以为每一个包寻找合适的源,达到优化配置的目的。