详解python框架django为例,还没开始写代码前的花式坑——解决办法和排错思路。pycharm解释器配置,虚拟环境venv配置,使用命令行。

如果你现在赶项目,就直接跳到符合的标题查看解决办法。如果你对理论思考不太感冒,也可以直接跳到指定标题。


如果你是学习者,极客,时间充足,希望你能够耐心的看下去,因为你在这里,不仅仅可以找到解决办法,更重要的是找到解决问题的思路和学习思考的方法。

大浪淘沙,编程道路上,绝大部分新人程序员,都被淘在了环境搭建及写代码前的各种配置上。我曾经也一样,无数次想咂电脑,呐喊:我特么学个技术,为什么还没起步,就给我搞出这么多屁事!
这不怪你们,因为你们才是程序世界的主力军挡你们者万死莫赎,都怪他们。

我仅仅希望,程序世界留住你的原因,有我一个。如果你以后成了大神,希望你也能为改变这个生态而做出一份自己的贡献,给这些生力军,主力军,保驾护航

前景知识

我们为何总会碰到一些觉得是脱裤子放屁多此一举的功能

不只是你,我也一样,任何人都一样。也不只在编程领域里,在生活中各个方面总能碰到一些让人不理解的地方。我们不从哲学式“存在即合理”的角度去讨论问题,但我们要承认,我们对某一件事物的不解都来自于不了解。可能我们每个人都知道,只是,我们经常没法很轻松的得到想要的答案而无奈而已。
我在这里要和你们分享几个角度,去看待或者对待一些看起来莫名其妙,多此一举的事物,尤其在编程领域,这应该会让你觉得没有那么难受,即使没有真正搞懂其中缘由。
1.它可能是一个为了超大型项目服务的技术点
屏幕前的你,也许是一个学生,也许是一个刚踏入编程工作的程序员,还远远想象不到我们正在当做工具/玩具一样的编程语言或技术点,如果用到很多很多很多的人需要去一起配合完成的项目中,会是个什么样子,而这只有经历了才能感同身受。但请你记住,工作中,永远不会是你一个人在战斗。你要对每个技术点,时刻抱着工程思想和态度
2.它可能是历史原因,但因已经流行,体量大到修改成本让人望而却步
任何一个项目,都不是一蹴而就的,慢慢发展进步,却又要做到兼容旧功能。而往往,很多项目初期,因为各种原因,没法做到面面俱到。我个人甚至在工作初期,使用一个微信开发者平台中很冷门的接口时,找到了BUG,并提交,那时晚上10点,腾讯那边加班改了,虽然影响并没有那么严重,但对当时的我来说,是比较有感触的。腾讯?怎么会在对外开放的接口里有BUG?那么大公司,怎么可能呢?甚至这种想法, 影响我当时追BUG的态度,尽量不去怀疑腾讯那边出了问题,而怀疑自己。但我们也要承认,大公司出问题的概率极低,我们调错,永远要在概率最大,时间成本最低的可能点开始。我想说,有时,你要相信自己,你的认知并没有错!可能,只是历史原因。


如何安装多个版本的python并且起不同的名字去执行

首先说,什么情况下可能需要安装多个版本。1.你可能在已经安装过旧版本的python环境中,想尝试新版本,又不能删掉旧版本 2.你可能因为学习不同的框架,不同的框架不同的版本,所要求的最低python版本不同。

这个问题不能独自解决,是因为没有搞清楚到底什么是环境变量,环境变量的工作原理(关于环境变量的概念和配置方法,不在这里解释,可以自行去搜索)。

我没有看任何文档,仅仅对于环境变量的理解,就做到了,不管是哪个操作系统道理是一样的。下面一步一步来看看,我的逻辑思路。

我们经常会在命令行执行命令,如:

# 跑python
python hello.py

那命令行就会根据你第一个空格前面的python这个单词,再根据系统变量设置的path中列出的那些路径,在每个路径下依次寻找python.exe可执行文件,如果有就会去执行。至于后面的hello.py是这个可执行文件规定的带参数方式而已。
比如 go 的执行:

# 跑go
go run hello.go

看截图。

先看当前环境变量(注意,有两种:用户变量和系统变量,两个地方都要查看):
在这里插入图片描述
从结果上,python是在截图中的蓝色那个目录下找到的。

再看对应目录下的截图:

在这里插入图片描述
它就是找到了图中这个可执行文件,去执行的。

那我们完全就可以改变这个exe文件的名字,比如:python333.exe。
改完后再去命令行执行 python hello.py 是没用的,因为找不到了。
你只能用 python333 hello.py 。你甚至可以改成go333.exe,然后执行go333 hello.py,当然不建议这么做。

那到了这里你就可以猜到,我们完全可以安装不同版本的python,把他们的程序目录都添加到环境变量中,然后各自的python.exe,改为他们对应的版本,做出区别,根据情况,用不同的版本去执行就可以了。


虚拟环境是什么,为什么产生,怎么用

首先,引出几个概念,全局环境,全局依赖包。
如果你的电脑,只有你一个人在用,并且还没有涉及过虚拟环境,那你到目前为止,所有python开发环境的操作都处于全局环境中,安装的依赖包也都在全局环境中。

如多个python版本的情况一样,如果你不同的python项目,需要不同的python版本,那也必然需要不同的依赖包。如果你经历比较多的项目,其实很多一次性的依赖,你并不希望安装在全局环境中,想让他随着项目一起存在和消失。
所以出现了虚拟环境,我们需要虚拟环境,去把每个项目以及他的依赖隔离开来。

隔离:是一种思想,是复杂系统中常用的解决思路,他有不同的实现方式。你会在后面长期的编程经历中慢慢体会。如,编程语言中的命名空间,Linux系统中的命名空间,虚拟机软件,Docker等等。

我们在开发时对依赖的需求,有两个阶段,一个是项目还没有创建,为了开发而准备的时候,另一个是项目创建后开发途中。

首先,如pip,venv或virtualenv这些,就是项目创建之前,就需要用到。你没有pip,你没法管理依赖包,更别提创建项目了,先要用pip安装了django,你才能创建django项目。所以这类依赖包,是不同项目共用的,需要安装在全局环境中,不能混淆。
其次,在开发django项目途中,你可能需要其他依赖包,就要在该项目的虚拟环境下安装。

概况:virtualenv是python3.3之前用的,venv是之后用的。python3.6之后安装时默认带了venv,直接用就可以了。

# 进入指定目录,创建虚拟环境。如:D:\code\python\testenv
python -m venv env_name

执行完如上命令,会在你的D:\code\python\testenv目录,生成一个文件夹,名字叫:env_name。

# 1.启动虚拟环境前,你处于全局环境中。

# 2.启动虚拟环境。
# 执行虚拟环境目录D:\code\python\testenv\env_name下的Scripts目录下的activate.bat脚本
cd code\python\testenv\env_name\Scripts
activate.bat
# 成功执行完毕后,你处于env_name这个虚拟环境中。

# 3.关闭虚拟环境。
# 执行虚拟环境目录D:\code\python\testenv\env_name下的Scripts目录下的deactivate.bat脚本
cd code\python\testenv\env_name\Scripts
deactivate.bat
# 成功执行完毕后,你再次处于全局环境中。

# 记住:你要根据你要安装的依赖包,属于哪里,正确切换到对应的环境中去安装。

各类错误

pycharm直接打开已创建django项目时依赖包引入错误

如图:
在这里插入图片描述
原因:pycharm不知道你打开的这个项目,相关的依赖包在哪里。你自己可能知道,是在例如:djangotest_env 的虚拟环境下。
解决办法:配置pycharm的解释器,解释器可以理解为python.exe,因为python是解释型语言,通过python.exe解释执行python代码,所以叫解释器也没毛病。它在虚拟环境目录下的Scripts目录下,至于全局环境的解释器当然就在python安装目录的Scripts目录下。

看过很多人说pycharm社区版不行,企业版才可以,或怎么样,都没有的事,是他们不会用。

配置解释流程,看图:

在这里插入图片描述
如下图,因为pycharm默认是使用全局环境的解释器,而我,因为是在叫做py396_env的虚拟环境目录下安装的django,所以django相关的依赖包,pycharm不知道,需要配置,告诉它。

在这里插入图片描述
继续看图,选择新建或配置虚拟环境解释器:

在这里插入图片描述
配置界面解释:

在这里插入图片描述
选择对应解释器,apply,OK,配置完毕:

在这里插入图片描述
配置完成后,就不会报错了:

在这里插入图片描述


打开pycharm命令行报错:无法加载文件 D:\code\py396\py396_env\Scripts\Activate.ps1,因为在此系统上禁止运行脚本。或执行activate脚本报错或没有任何反应。

报错如图:

在这里插入图片描述
如果按照新人角度,看到这块儿错误提示中,有activate脚本执行的语句,就会下意识认为是虚拟环境启动失败了。其他语句也不会去管,也看不懂。

而根据习惯,我们会试图进入到对应的虚拟环境启动脚本目录下,如D:\code\py396\py396_env\Scripts,执行activate.bat。

然而,报错如下:

在这里插入图片描述
那继续根据提示,前面加上当前目录去执行:.\activate.bat

然而,反应如图,没有任何反应:
在这里插入图片描述
开始讨论:
首先,我们需要通过如上几个反应中,学会思考和发现问题。

从上述截图列表中的反应,我们需要搜集到如下几个信息:
1.打开命令行时,pycharm试图自动找到对应虚拟环境启动脚本所在的目录,并执行看似启动脚本的东西,D:\code\py396\py396_env\Scripts\Activate.ps1,只是扩展名为,ps1。
2.根据报错所知,我们因为某些原因,被禁止执行该启动脚本了。
3.我们指定之前所知的启动脚本activate.bat,没有任何反应。而我们在虚拟环境创建时,已经在cmd命令行中成功执行成功过虚拟环境启动脚本。所以,说明,cmd命令行,和pycharm这个终端,不太一样。

这时,我就去搜索,ps1扩展名是干什么的,他是powershell脚本。

由此,我得出结论。
1.pycharm终端是通过powershell实现的,并且脚本要执行.ps1而不是.bat
2.虽然不知道具体原理,但至少可以确定,pycharm会根据打开的项目中某些文件上的信息,去准确定位到了对应虚拟环境及其启动脚本,因为我们根本没有设置过。
3.powershell权限受限了,无法执行启动脚本了。

然后,我就去搜索这个错误相应的解决方案,一搜一堆。发现了一个概念:set-executionpolicy xxx,从这个名词就可以看出,是设置执行策略的。

这种系统安全相关的设置,一般需要最高权限,所以win窗口搜索powershell,右击用管理员身份打开:

在这里插入图片描述
脚本执行策略可以从微软官网查看到:
Set-ExecutionPolicy(Microsoft.PowerShell.Security)

Restricted:不加载配置文件或运行脚本。 Windows 客户端计算机的默认执行策略。(默认)
RemoteSigned:要求从 Internet 下载的所有脚本和配置文件都由受信任的发布者签名。 Windows 服务器计算机的默认执行策略。

设置并查看当前脚本执行策略:

在这里插入图片描述
至此,再次到pycharm的命令行中,执行./activate,就能成功切换虚拟环境了。
如图:
在这里插入图片描述
如果懒得跳转目录,并执行命令,你也可以直接关闭命令行,重新打开,那pycharm会自动给你执行启动脚本切换到虚拟环境中。
注意是关闭命令行,而不是最小化,如图:

在这里插入图片描述

太晚了,今天先这样,之后再补更新… … …

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值