惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
Last Week in AI
Last Week in AI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
H
Help Net Security
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
宝玉的分享
宝玉的分享
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
博客园 - 司徒正美
量子位
N
Netflix TechBlog - Medium
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
Recorded Future
Recorded Future
博客园 - 三生石上(FineUI控件)
Vercel News
Vercel News
aimingoo的专栏
aimingoo的专栏
I
InfoQ
Microsoft Security Blog
Microsoft Security Blog
Scott Helme
Scott Helme
The Last Watchdog
The Last Watchdog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
IT之家
IT之家
AI
AI
WordPress大学
WordPress大学
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
U
Unit 42
V2EX - 技术
V2EX - 技术
MongoDB | Blog
MongoDB | Blog
Schneier on Security
Schneier on Security
博客园 - Franky
H
Heimdal Security Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
W
WeLiveSecurity
P
Privacy & Cybersecurity Law Blog
Cloudbric
Cloudbric
B
Blog RSS Feed
N
News | PayPal Newsroom
S
Securelist
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
I
Intezer
Hacker News - Newest:
Hacker News - Newest: "LLM"
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
博客园_首页
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More
雷峰网
雷峰网

老鱼的博客

DOS 内存粗解 - 老鱼的博客 Qt Quick 编译器简介 - 老鱼的博客 在 openSUSE 底下跨平台编译 mingw64 程序 安装与编译最简 windows qt - 老鱼的博客 如何存储密码(KDF) - 老鱼的博客 静态编译 Qt 简单教程 - 老鱼的博客 bcache 的使用 - 老鱼的博客 Linux 下超频 Ryzen 1700 - 老鱼的博客 怎么样在 virtualenv 里面使用 PyQt - 老鱼的博客
激活 Python 虚拟环境 - 老鱼的博客
2020-07-08 · via 老鱼的博客

激活 Python 虚拟环境


类型:Python,创建时间:July 8, 2020, 12:23 p.m.

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/111/。

使用 Python 开发的朋友们应该都知道 virtualenv 和 venv 创建虚拟环境了吧。

使用虚拟环境不会破坏 Python 的系统环境,也方便了布署,实在是非常好的编程实践。比较常用的几个 IDE,比如 PyCharm 和 Visual Studio 对虚拟环境的支持都不错。创建工程的时候可以选择一起创建虚拟环境,或者在 IDE 里面点几下搞定。实在非常方便。终端下则是 .env/bin/activate 激活。

如果有朋友观察过 Python 虚拟环境的目录结构,可以看到 bin 里面有一些有趣的东东:

bin/activate
bin/activate.fish
bin/activate.csh
bin/activate.ps1
bin/activate_this.py

这些文件都是激活虚拟目录的脚本。其中 bin/activate 是最常见的脚本,用于 bash,而 activate.fish 是 fish 激活脚本,fish 是一种比日常使用的 bash 更方便的 shell,有兴趣的朋友可以试一下,这也是我使用的 shell. activate.csh 则是 bsd 常用的 csh 的激活脚本。activate.ps1 是 windows powershell 激活脚本。它们的使用方法都类似就不说了。

有朋友问,布署到服务器里面时,要怎么样在启动应用的同时激活虚拟环境呢。太简单了,为你的服务器制作一个 myapp.sh 脚本就行了:

#!/bin/sh
cd /path/to/yourproject/
. env/bin/activate
uwsgi --app xxxx.wsgi

无论你制作 systemd 启动脚本,还是 sysv 启动脚本,都不要直接运行程序命令,而是指向这个 myapp.sh 脚本就行了。不过更推荐的是把 python 服务器都是运行在 docker 环境里面。

剩下最后一个 bin/activate_this.py 可能大家很少用。它的作用是直接在 python 脚本里面激活虚拟环境。比如你写了一个脚本叫做 fish.py,如果加上这些内容,执行它的时候你就不需要事先激活虚拟环境了(适用于 python3)。

import io
import os

activate_this = os.path.join(os.path.dirname(__file__), "env/bin/activate_this.py")
with io.open(activate_this, "r", encoding="utf-8") as f:
    exec(f.read(), {"__file__": activate_this})

import django   # 可以导入虚拟环境的包了。
print(django.VERSION)

真正使用的时候,我们还要考虑管理员不一定懂得使用 env/bin/python 来运行脚本。这时候可以考虑再检测一下 python 解释器版本。如果解释器不对,就调用正确的解释器重新执行脚本:

import sys

python_interceptor = os.path.abspath(os.path.join(os.path.dirname(__file__), "env/bin/python"))
if sys.executable != python_interceptor:
    args = [python_interceptor]
    args.extend(sys.argv)
    os.execv(python_interceptor, args)

这时候,就算管理员用了系统里面旧的 python2,最终脚本都会在虚拟环境的 python 解释器里面执行。

标题无“转载”即原创文章,版权所有。转载请注明来源:http://hgoldfish.com/blogs/article/111/。


暂时还没有任何评论。