以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「englyf」https://mp.weixin.qq.com/s/WTl7BPAhX5VuK-gmHaErMg
本文大概 1667 个字,阅读需花 4 分钟
内容不多,但也花了一些精力
如要交流,欢迎评论区留言
谢谢你的点赞收藏分享
Python 开发环境非常灵活,得益于可以创建虚拟环境。
难道全局地安装完 python 支持包然后直接 pip 再安装一波依赖包就不可以开发 python 程序了吗?
明显是可以的,而且可以运行的非常好。不过,如果你接手了别人的代码工程,却发现对方使用的 python 版本或者依赖库都和你的环境不兼容时,怎么办?打算卸掉自己原来的那一套环境再重来吗?真麻烦!
其实,虚拟环境就能完美解决这个苦恼。
创建虚拟环境时,使用对于 python2 和 python3 的配置细节不一样,但是思路是一样的。
python2 需要通过第三方包 virtualenv 来创建虚拟环境。
先通过 pip 模块安装第三方包
pip install virtualenv
然后在自己的工程目录里启动执行指令
virtualenv venv
上面的指令会自动创建文件夹 venv,该文件夹内就存储着虚拟环境的所有内容。

而python3 仅需要通过语言自带的模块 venv 来创建虚拟环境,python2 是没有这个模块的。
由于 python3 是目前 python 的主流版本,所以下面的介绍只适用于 python3,并且适用版本是 Python 3.8.10。
在自己的工程目录里启动执行指令
// windows cmd
python -m venv venv
创建好虚拟环境后,开发和维护这个工程时,希望工程依赖的 python 版本和依赖包等能独立被管理起来,并且不需和全局环境兼容,那么这个工程的 python 版本和所有的依赖包都需要只在这个虚拟的环境下安装和储存。
启动开发调试或者安装第三方依赖包之前,启动环境仅需要执行在创建环境时自动生成的脚本。
// windows cmd
.\venv\Scripts\activate.bat
// windows powershell
.\venv\Scripts\Activate.ps1
// linux bash
source .\venv\Scripts\activate
然后你会看到命令窗口的命令行前面多了个(venv),表示虚拟环境已启动
(venv) D:\prj\venv>
而一旦你需要转移工程时,你也就仅需要把存放虚拟环境的文件夹 venv 一起拷贝即可。
创建完虚拟环境后,来看看有哪些包已经被安装了
(venv) D:\prj\venv>pip list
Package Version
---------- -------
pip 21.1.1
setuptools 56.0.0
WARNING: You are using pip version 21.1.1; however, version 22.3.1 is available.
You should consider upgrading via the 'd:\prj\venv\venv\scripts\python.exe -m pip install --upgrade pip' command.
出警告了,说是建议升级当前的模块 pip 版本。估计是当前的版本出了一些比较严重的bug,为了减少不必要的麻烦,升吧。
(venv) D:\prj\venv>python -m pip install --upgrade pip
Requirement already satisfied: pip in d:\prj\venv\venv\lib\site-packages (21.1.1)
Collecting pip
Using cached pip-22.3.1-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 21.1.1
Uninstalling pip-21.1.1:
Successfully uninstalled pip-21.1.1
Successfully installed pip-22.3.1
假如因为工程实际需要开发GUI,那么可以引入第三方包 wxPython,使用前还是需要安装的。
有时候吧,你会发现很不幸,安装 wxPython 失败了。因为第三方包的维护其实是各自独立的,和 python 各个版本模块有一定的兼容性问题。建议还是换一个 python 版本再试试,不过我这版本目前是没问题的。
(venv) D:\prj\venv>pip install wxpython
Collecting wxpython
Using cached wxPython-4.2.0-cp38-cp38-win_amd64.whl (18.0 MB)
Collecting six
Using cached six-1.16.0-py2.py3-none-any.whl (11 kB)
Collecting numpy
Using cached numpy-1.23.5-cp38-cp38-win_amd64.whl (14.7 MB)
Collecting pillow
Using cached Pillow-9.3.0-cp38-cp38-win_amd64.whl (2.5 MB)
Installing collected packages: six, pillow, numpy, wxpython
Successfully installed numpy-1.23.5 pillow-9.3.0 six-1.16.0 wxpython-4.2.0
再看看当前的环境
(venv) D:\prj\venv>pip list
Package Version
---------- -------
numpy 1.23.5
Pillow 9.3.0
pip 22.3.1
setuptools 56.0.0
six 1.16.0
wxPython 4.2.0
问题来了,上面的示例只是安装了一个依赖包就有了这么长的配置,如果我安装的依赖包非常多,多到自己都不记得了,然后万一我把文件夹 venv 的内容全删掉了,也就是说我需要重新配置环境,这时是不是得疯掉?
不用担心,有个很好的方法保存当前的环境依赖包信息到本地文件。
pip freeze > requirements.txt
上面的指令将当前的依赖包关系转存到了文件 requirements.txt 中,至于为什么要用这个名字呢?这里其实没有特殊要求,只是为了兼容某些开发平台的习惯,比如著名的 Pycharm。
好了,配置保存到了本地,那么在依赖包缺失的环境中怎么重复利用这个配置信息呢?
pip install -r requirements.txt
这样子就一键恢复了原来保存的安装配置。在 Pycharm 平台会自动识别工程根目录下面的 requirements.txt 这个文件名的配置。
有些情况下,需要临时退出虚拟环境的配置,调用对应的脚本
// windows cmd
.\venv\Scripts\deactivate.bat
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我已经在Sinatra上创建了应用程序,它代表了一个简单的API。我想在生产和开发上进行部署。我想在部署时选择,是开发还是生产,一些方法的逻辑应该改变,这取决于部署类型。是否有任何想法,如何完成以及解决此问题的一些示例。例子:我有代码get'/api/test'doreturn"Itisdev"end但是在部署到生产环境之后我想在运行/api/test之后看到ItisPROD如何实现? 最佳答案 根据SinatraDocumentation:EnvironmentscanbesetthroughtheRACK_ENVenvironm
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o