pipenv学习记录(三)

本文目录

3 高级用法

3.1 基于Pipfile创建虚拟环境

pipenv install

实际例子如下:
pipenv学习记录(三)
这里是先将当前的虚拟环境删除掉,然后重新创建虚拟环境,可以看到,重新创建后的环境跟删除之前的是一致的,不仅重新创建了虚拟环境,而且安装了Pipfile.lock里面相关的包,这对于进行环境迁移非常有用。
具体的方法:
(1)复制当前项目的Pipfile和Pipfile.lock到新的目录下。
(2)cmd进入到新的目录。
(3)使用pipenv install命令进行创建。
pipenv学习记录(三)
这个对于统一开发运行环境来说有很大的意义,整个团队的人员都使用相同的运行环境,那么很简单,就是把这个Pipfile和Pipfile.lock都提交到代码库中进行维护即可。

3.2 确定创建虚拟环境的目录

3.2.1 虚拟环境路径

默认的情况下,虚拟环境存放在python安装目录下,例如:D:\Python\workonhome
这样的方式,很大的好处是,跟项目源码分离,管理源码时,不受到虚拟环境相关文件的干扰。
虚拟环境目录是由环境变量“WORKON_HOME”来定义的。
在Windows下,cmd查看环境变量:

set WORKON_HOME

pipenv学习记录(三)

3.2.2 修改虚拟环境路径

如果不想放在默认位置,则修改这个变量即可。
一般来说,为了方便管理,最好是指定一个比较容易管理的位置。
pipenv学习记录(三)
需要注意的是,如果改动这个路径,之前的虚拟环境可能失效。
需要将之前的虚拟环境文件也迁移过去,否则会认为是新的虚拟环境。
只拷贝虚拟环境文件过去,还是会失效,报错如下:
pipenv学习记录(三)
需要处理这个问题,比较简单的方法是重建。

pipenv --rm
pipenv install

pipenv学习记录(三)

备选方案

当然,也可以尝试修改虚拟环境文件:activate.bat
pipenv学习记录(三)
修改内容:

@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

查看如下:
pipenv学习记录(三)
pipenv学习记录(三)
当然,这种一般是特殊需要的时候这么干,如果是一般项目,不太建议用这种方法。
因为会把.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用的是清华大学的。
通过这种配置,可以为每一个包寻找合适的源,达到优化配置的目的。

上一篇:Jsp


下一篇:【ybtoj】【单调队列】出题方案