这里显示 Pipenv 利用 /usr/local/bin/python3 作为 virtualenv 的解释器,然后在 /Users/CQC/.local/share/virtualenvs/PipenvTest-VSTVh89E/bin 目录下创建了一个新的 Python3 解释器,同时还创建了两个可执行文件别名 python3.6 和 python,另外我们还可以发现目录下多了一个 Pipfile 文件,这时虚拟环境就创建完成了。
我们切换到 PipenvTest-VSTVh89E/bin 目录查看一下文件结构,可以看到这里面包含了 pip、pip3、pip3.6、python、python3、python3.6 等可执行文件,实际上目录结构和使用 virtualenv 时是完全一样的,只不过文件夹的位置不同而已。
接下来我们可以切换到该虚拟环境下执行命令,执行如下命令即可:
- pipenv shell
- 类似于source activate XXX
执行完毕之后样例输出如下:
- Spawning environment shell (/bin/zsh). Use 'exit' to leave.
- source /Users/CQC/.local/share/virtualenvs/PipenvTest-VSTVh89E/bin/activate
- CQC-MAC% source /Users/CQC/.local/share/virtualenvs/PipenvTest-VSTVh89E/bin/activate
- (PipenvTest-VSTVh89E) CQC-MAC%
实际上这也和 virtualenv 激活的流程一样,也是调用了类似 source venv/bin/activate 方法将这个路径加到全局环境变量最前面,这样就会优先调用该路径下的 python、python3、python3.6 可执行文件了。
这时候我们会发现命令行的样子就变了,前面多了一个 (PipenvTest-VSTVh89E) 的标识,代表当前我们已经切换到了虚拟环境下。
这时我们用 which 或 where 命令查看一下 Python 可执行文件的路径,命令如下:
- (PipenvTest-VSTVh89E) CQC-MAC% which python3
- /Users/CQC/.local/share/virtualenvs/PipenvTest-VSTVh89E/bin/python3
- (PipenvTest-VSTVh89E) CQC-MAC% which python3.6
- /Users/CQC/.local/share/virtualenvs/PipenvTest-VSTVh89E/bin/python3.6
- (PipenvTest-VSTVh89E) CQC-MAC% which python
- /Users/CQC/.local/share/virtualenvs/PipenvTest-VSTVh89E/bin/python
可以发现当前的 Python 可执行路径都被切换到了 PipenvTest-VSTVh89E/bin 目录下,调用的是虚拟环境中的 Python 解释器,这时我们重新执行刚才的脚本,命令如下:
- (PipenvTest-VSTVh89E) CQC-MAC% python3 main.py
这时我们可以发现报了如下错误:
- Traceback (most recent call last):
- File "main.py", line 1, in <module>
- import django
- ModuleNotFoundError: No module named 'django'
这其实是因为新的虚拟环境没有安装任何的 Python 第三方包,实际上如果直接使用 virtualenv 时也是这样的结果。这是因为新的虚拟环境是一个全新的 Python 环境,它默认只包含了 Python 内置的包以及 pip、wheel、setuptools 包,其他的第三方包都没有安装。
这时我们可以使用 Pipenv 来安装 django 包,命令如下:
- pipenv install django
运行结果如下所示
- Installing django…
- Collecting django
- Downloading Django-2.0.2-py3-none-any.whl (7.1MB)
- Collecting pytz (from django)
- Downloading pytz-2018.3-py2.py3-none-any.whl (509kB)
- Installing collected packages: pytz, django
- Successfully installed django-2.0.2 pytz-2018.3
-
- Adding django to Pipfile's [packages]…
- Locking [dev-packages] dependencies…
- Locking [packages] dependencies…
- Updated Pipfile.lock (e101fb)!
如果有这样的输出结果就代表成功安装了 Django,可以看到此时安装的 Django版本为 2.0,代表我们的虚拟环境成功安装了 Django2.0 版本。
同时我们还注意到它输出了一句话叫做 Updated Pipfile.lock,这时我们可以发现项目路径下又生成了一个 Pipfile.lock 文件,内容如下:
- {
- "_meta": {
- "hash": {
- "sha256": "7b9623243d9c22b1f333ee710aff70d0cbcdf1dd7e0aac69230dc76855d27270"
- },
- "host-environment-markers": {
- "implementation_name": "cpython",
- "implementation_version": "3.6.1",
- "os_name": "posix",
- "platform_machine": "x86_64",
- "platform_python_implementation": "CPython",
- "platform_release": "17.4.0",
- "platform_system": "Darwin",
- "platform_version": "Darwin Kernel Version 17.4.0: Sun Dec 17 09:19:54 PST 2017; root:xnu-4570.41.2~1/RELEASE_X86_64",
- "python_full_version": "3.6.1",
- "python_version": "3.6",
- "sys_platform": "darwin"
- },
- "pipfile-spec": 6,
- "requires": {},
- "sources": [
- {
- "name": "pypi",
- "url": "https://pypi.python.org/simple",
- "verify_ssl": true
- }
- ]
- },
- "default": {
- "django": {
- "hashes": [
- "sha256:af18618ce3291be5092893d8522fe3919661bf3a1fb60e3858ae74865a4f07c2",
- "sha256:9614851d4a7ff8cbd32b73c6076441f377c45a5bbff7e771798fb02c43c31f47"
- ],
- "version": "==2.0.2"
- },
- "pytz": {
- "hashes": [
- "sha256:ed6509d9af298b7995d69a440e2822288f2eca1681b8cce37673dbb10091e5fe",
- "sha256:f93ddcdd6342f94cea379c73cddb5724e0d6d0a1c91c9bdef364dc0368ba4fda",
- "sha256:61242a9abc626379574a166dc0e96a66cd7c3b27fc10868003fa210be4bff1c9",
- "sha256:ba18e6a243b3625513d85239b3e49055a2f0318466e0b8a92b8fb8ca7ccdf55f",
- "sha256:07edfc3d4d2705a20a6e99d97f0c4b61c800b8232dc1c04d87e8554f130148dd",
- "sha256:3a47ff71597f821cd84a162e71593004286e5be07a340fd462f0d33a760782b5",
- "sha256:5bd55c744e6feaa4d599a6cbd8228b4f8f9ba96de2c38d56f08e534b3c9edf0d",
- "sha256:887ab5e5b32e4d0c86efddd3d055c1f363cbaa583beb8da5e22d2fa2f64d51ef",
- "sha256:410bcd1d6409026fbaa65d9ed33bf6dd8b1e94a499e32168acfc7b332e4095c0"
- ],
- "version": "==2018.3"
- }
- },
- "develop": {}
- }
可以看到里面标识了 Python 环境基本信息,以及依赖包的版本及 hashes 值。
另外我们还可以注意到 Pipfile 文件内容也有更新,[packages] 部分多了一句 django = “*”,标识了本项目依赖于 Django,这个其实类似于 requirements.txt 文件。
那么到这里有小伙伴可能就会问了, Pipfile 和 Pipfile.lock 有什么用呢? (编辑:广西网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|