Python 3 入门 - 2. 开发环境搭建

本人使用Windows10。其他平台请自行尝试。事实上,Python官网提供了非常详细的在各个平台上的《Python安装和使用》说明。


选择Python版本

以下内容来自 https://www.python.org/download/releases/3.0/

Python 3.0 final 于 2008 年 12 月 3 日发布。

Python 3.0(又名“Python 3000”或“Py3k”)是该语言的新版本,与2.x系列版本不兼容。语言大多相同,但许多细节,特别是字典和字符串等内置对象的工作方式,已经发生了很大变化,许多已弃用的功能最终被删除。此外,标准库已在几个显眼的地方进行了重组。

早年间,我们可能会对到底学习Python2还是Python3犹豫不决,一方面几乎所有成熟的框架都是用Python2写的,Linux发行版中也只是预装了Python2,另一方面Python3一定是未来、是趋势。而现在,几乎不用多想,只要你不用维护旧的Python应用,Python3就是你的最佳选择。


安装Python解释器

从官网选择合适的版本并下载:https://www.python.org/downloads/
例如,我选择当前最新稳定版本 3.10.4的64位Windows安装程序

在这里插入图片描述
选“Install Now”,安装在当前用户的目录下。如果要安装给所有用户使用,需要选“Customize installation”。
勾选“Add Python 3.10 to PATH”,以免以后麻烦。效果如下:
在这里插入图片描述

安装结束后,在最后一个界面要记得点击删除Windows的MAX_PATH限制。官方文档说明如下:

4.1.2. 删除 MAX_PATH 限制

历史上Windows的路径长度限制为260个字符。这意味着长于此的路径将无法解决并导致错误。

在最新版本的 Windows 中,此限制可被扩展到大约 32,000 个字符。 但需要让管理员激活“启用 Win32 长路径”组策略,或在注册表键 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem 中设置 LongPathsEnabled 为 1。

打开cmd或PowerShell,执行以下命令。

C:\Users\user>python --version
Python 3.10.4

C:\Users\user>python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello Python!')
Hello Python!
>>>

Python还提供了Microsoft Store安装方式,但我实在想不出来有什么必要。

由于Microsoft Store应用程序的限制,Python脚本可能无法对共享位置(如 TEMP)和注册表进行完全写入访问。相反,它将写入私人副本。如果脚本必须修改共享位置,则需要安装完整安装程序。


创建Python虚拟环境(可选)

虽然大多数情况下不创建虚拟环境也没什么问题,特别是在Windows开发环境下,不会出现既有Python2又有Python3的情况,但使用虚拟环境还是有以下好处:

  • 可以使不同的Python项目安装的package相互独立,互不影响。
  • 能够让系统目录保持干净。
  • 删除虚拟环境也很方便,只要将该环境的目录删除即可。

虚拟环境的原理

  • 如果不创建虚拟环境,执行 pip install somepackage 命令时,somepackage 会被安装到Python的安装目录下,即:C:\Users\user\AppData\Local\Programs\Python\Python310\Lib\site-packages
  • 如果创建了虚拟环境,会在指定位置(例如 C:\Users\user\PyProjects\proj1\.env\ )创建一套包含了脚本和python可执行程序的目录结构,执行脚本后环境变量被修改,再执行python命令时就执行的 C:\Users\user\PyProjects\proj1\.env\Scripts\ 下面的 python.exepip.exe 了,执行 pip install somepackage 命令时,somepackage 会被安装到 C:\Users\user\PyProjects\proj1\.env\Lib\site-packages 中。

注:pip 意思是 Package Installer for Python。

创建与使用

从Python 3.3开始,不用再安装任何package,就可以使用 venv 创建虚拟环境。而在此之前,一般使用 virtualenv 。不过在Linux下,由于一般都需要Python2和Python3共存,所以还是使用 virtualenv。官方文档位置如下:
venv — 创建虚拟环境
Installing packages using pip and virtual environments

If you are using Python 3.3 or newer, the venv module is the preferred way to create and manage virtual environments. venv is included in the Python standard library and requires no additional installation.

创建项目目录,并在目录下创建虚拟环境。这里将虚拟环境目录命名为 .env,但实际上叫什么都可以。甚至虚拟环境目录放在别的地方也无所谓(只是比较乱而已)。

C:\Users\user>mkdir PyProjects\proj1

C:\Users\user>cd PyProjects\proj1

C:\Users\user\PyProjects\proj1>python -m venv .env

C:\Users\user\PyProjects\proj1>

注意: Scripts下面有三个activate脚本

  • activate ——bash 脚本
  • activate.bat ——Command Prompt (cmd.exe) 脚本
  • Activate.ps1 ——Windows PowerShell 脚本

执行 activate 脚本,进入虚拟环境。(可以不输入扩展名,cmd 或 PowerShell 会自动选择合适的脚本)

C:\Users\user\PyProjects\proj1>.env\Scripts\activate

屏幕上出现 (.env),则说明成功进入虚拟环境。

(.env) C:\Users\user\PyProjects\proj1>

不过……如果是使用PowerShell,你大概率会看到:

PS C:\Users\user\PyProjects\proj1> .\.env\Scripts\activate
.\.env\Scripts\activate : 无法加载文件 C:\Users\user\PyProjects\proj1\.env\Scripts\Activate.ps1,因为在此系统上禁止
运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的 about_Execution_Policies。
所在位置 行:1 字符: 1
+ .\.env\Scripts\activate
+ ~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [],PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess
PS C:\Users\user\PyProjects\proj1>

解决方法是:以管理员身份打开新的 PowerShell 窗口,再执行 set-ExecutionPolicy RemoteSigned 命令。(参考:https://blog.csdn.net/ilqgffvramusm2864/article/details/109809476

Windows PowerShell
版权所有 (C) Microsoft Corporation。保留所有权利。

尝试新的跨平台 PowerShell https://aka.ms/pscore6

PS C:\Windows\system32> get-ExecutionPolicy
Restricted
PS C:\Windows\system32> set-ExecutionPolicy RemoteSigned

执行策略更改
执行策略可帮助你防止执行不信任的脚本。更改执行策略可能会产生安全风险,如 https:/go.microsoft.com/fwlink/?LinkID=135170
中的 about_Execution_Policies 帮助主题所述。是否要更改执行策略?
[Y](Y)  [A] 全是(A)  [N](N)  [L] 全否(L)  [S] 暂停(S)  [?] 帮助 (默认值为“N”): y
PS C:\Windows\system32>

然后再执行 activate 脚本即可。

PS C:\Users\user\PyProjects\proj1> .env\Scripts\activate
(.env) PS C:\Users\user\PyProjects\proj1>

在虚拟环境中安装 fuzzywuzzy ,并尝试 import fuzzywuzzy

(.env) PS C:\Users\user\PyProjects\proj1> pip list
Package    Version
---------- -------
pip        22.0.4
setuptools 58.1.0
(.env) PS C:\Users\user\PyProjects\proj1> pip install fuzzywuzzy
Collecting fuzzywuzzy
  Downloading fuzzywuzzy-0.18.0-py2.py3-none-any.whl (18 kB)
Installing collected packages: fuzzywuzzy
Successfully installed fuzzywuzzy-0.18.0
(.env) PS C:\Users\user\PyProjects\proj1> pip list
Package    Version
---------- -------
fuzzywuzzy 0.18.0
pip        22.0.4
setuptools 58.1.0
(.env) PS C:\Users\user\PyProjects\proj1> python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import fuzzywuzzy
>>> 

可以看到没有出错。然后使用 deactivate 命令退出虚拟环境,然后再尝试 import fuzzywuzzy

(.env) PS C:\Users\user\PyProjects\proj1> deactivate
PS C:\Users\user\PyProjects\proj1> pip list
Package    Version
---------- -------
pip        22.0.4
setuptools 58.1.0
PS C:\Users\user\PyProjects\proj1> python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import fuzzywuzzy
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'fuzzywuzzy'
>>>

安装控制台调试工具ipdb(可选)

提前了解:什么是pdb?

pdb即Python Debugger,是Python自带的控制台下的调试器。pdb的使用方式主要有三种,以下分别举例说明。

等待调试的 trans.py 文件内容如下:

import gettext

def translate_demo_gnu_api():
    # set LANG=zh_CN first
    gettext.bindtextdomain('trans', localedir='locale')
    gettext.textdomain('trans')
    _ = gettext.gettext

    print(_('Hello! What is your name?'))

    #回到原始文字
    _ = lambda s: s
    print(_('Hello! What is your name?'))

方式一: 进入python解释器后,分别 import pdb 和要调试的模块,执行 pdb.run('my_modual.myfun()')

C:\Users\user\PyProjects\gettext>python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pdb
>>> import trans
>>> pdb.run('trans.translate_demo_gnu_api()')
> <string>(1)<module>()
(Pdb) break trans.py:6
Breakpoint 1 at c:\users\user\pyprojects\gettext\trans.py:6
(Pdb) continue
> c:\users\user\pyprojects\gettext\trans.py(6)translate_demo_gnu_api()
-> gettext.textdomain('trans')
(Pdb) list
  1     import gettext
  2
  3     def translate_demo_gnu_api():
  4         # set LANG=zh_CN first
  5         gettext.bindtextdomain('trans', localedir='locale')
  6 B->     gettext.textdomain('trans')
  7         _ = gettext.gettext
  8
  9         print(_('Hello! What is your name?'))
 10
 11         #回到原始文字
(Pdb) next
> c:\users\user\pyprojects\gettext\trans.py(7)translate_demo_gnu_api()
-> _ = gettext.gettext
(Pdb) continue
你好!你叫什么名字?
Hello! What is your name?
>>>

以上执行 pdb.run() 以后,先使用 break 设置了断点,然后使用 continue 执行代码,遇到断点后,使用 list 查看附近代码,再使用 next 执行下一行语句,最后使用 continue 完成后续代码的执行。


方式二: 将pdb作为脚本使用,调试其他脚本,即执行 python -m pdb my_modual.py 。首先修改 trans.py ,在末尾增加以下内容:

if __name__ == '__main__':
    print('-----Calling translate_demo_gnu_api():')
    translate_demo_gnu_api()

现在整个文件是这样的:

import gettext

def translate_demo_gnu_api():
    # set LANG=zh_CN first
    gettext.bindtextdomain('trans', localedir='locale')
    gettext.textdomain('trans')
    _ = gettext.gettext

    print(_('Hello! What is your name?'))

    #回到原始文字
    _ = lambda s: s
    print(_('Hello! What is your name?'))


if __name__ == '__main__':
    print('-----Calling translate_demo_gnu_api():')
    translate_demo_gnu_api()

然后执行 python -m pdb trans.py

c:\users\user\pyprojects\gettext>python -m pdb trans.py
> c:\users\user\pyprojects\gettext\trans.py(1)<module>()
-> import gettext
(Pdb) b 6
Breakpoint 1 at c:\users\user\pyprojects\gettext\trans.py:6
(Pdb) c
-----Calling translate_demo_gnu_api():
> c:\users\user\pyprojects\gettext\trans.py(6)translate_demo_gnu_api()
-> gettext.textdomain('trans')
(Pdb) l
  1     import gettext
  2
  3     def translate_demo_gnu_api():
  4         # set LANG=zh_CN first
  5         gettext.bindtextdomain('trans', localedir='locale')
  6 B->     gettext.textdomain('trans')
  7         _ = gettext.gettext
  8
  9         print(_('Hello! What is your name?'))
 10
 11         #回到原始文字
(Pdb) c
你好!你叫什么名字?
Hello! What is your name?
The program finished and will be restarted
> c:\users\user\pyprojects\gettext\trans.py(1)<module>()
-> import gettext
(Pdb) q

c:\users\user\pyprojects\gettext>

可以看到,调试过程跟之前几乎是一样的,不过这次我们使用了缩写的命令 b c l q (qquit)。在(Pdb)环境中,执行 h | help 可以查看所有命令,执行 h some_cmd 可以查看 some_cmd 的具体解释。常用命令有:

  • b | break 设置断点
  • tbreak 设置临时断点
  • cl | clear 删除断点
  • c | cont | continue 继续执行
  • display 添加Watch
  • undisplay 删除Watch
  • j | jump 跳到某行
  • n | next 执行到当前函数的下一行
  • s | step 步进
  • r | return 继续执行知道当前函数返回
  • l | list 查看当前代码
  • w | where 查看当前执行的位置
  • restart 重新开始
  • q | quit | exit 退出调试器

方式三: 修改要调试的 .py 文件,import pdb,并在需要设置断点的地方插入 pdb.set_trace() 语句。——这种方式也可以在调试过程中手工设置新的断点。

修改后的 trans.py 文件内容如下:

import gettext
import pdb

def translate_demo_gnu_api():
    # set LANG=zh_CN first
    gettext.bindtextdomain('trans', localedir='locale')

    pdb.set_trace()

    gettext.textdomain('trans')
    _ = gettext.gettext

    print(_('Hello! What is your name?'))

    #回到原始文字
    _ = lambda s: s
    print(_('Hello! What is your name?'))

现在可以在解释器里直接调用 trans.translate_demo_gnu_api() ,调试器停在 pdb.set_trace() 的下一行。

c:\users\user\pyprojects\gettext>python
Python 3.10.4 (tags/v3.10.4:9d38120, Mar 23 2022, 23:13:41) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

>>> import pdb
>>> import trans
>>> trans.translate_demo_gnu_api()
> c:\users\user\pyprojects\gettext\trans.py(10)translate_demo_gnu_api()
-> gettext.textdomain('trans')
(Pdb) l
  5         # set LANG=zh_CN first
  6         gettext.bindtextdomain('trans', localedir='locale')
  7
  8         pdb.set_trace()
  9
 10  ->     gettext.textdomain('trans')
 11         _ = gettext.gettext
 12
 13         print(_('Hello! What is your name?'))
 14
 15         #回到原始文字
(Pdb) n
> c:\users\user\pyprojects\gettext\trans.py(11)translate_demo_gnu_api()
-> _ = gettext.gettext
(Pdb) c
你好!你叫什么名字?
Hello! What is your name?
>>>

说明:为了使以上代码实现翻译,还需要制作.po文件以及一点其他的额外工作,此处不赘述。

提前了解:什么是IPython

IPython是一个python的交互式shell,比默认的python shell好用得多,支持变量自动补全,自动缩进,支持bash shell命令,内置了许多很有用的功能和函数。学习ipython将会让我们以一种更高的效率来使用python。同时它也是利用Python进行科学计算和交互可视化的一个最佳的平台。

https://blog.csdn.net/gavin_john/article/details/53086766

IPython的官方文档在此:https://ipython.readthedocs.io/en/stable/

来感受一下界面截图吧:
在这里插入图片描述
可以像使用 python 一样使用 ipython,比如:

  • ipython some.py
  • ipython -m pdb some.py 这也是可以的,但是,在 ipython 里使用 pdb 时,界面又回到黑白世界了。所以就需要 ipdb (即 IPython pdb)了。

安装与使用ipdb

执行 pip install ipdb 安装 ipdb,然后像使用 pdb 一样使用 ipdb 即可。例如调试下面的 lucky.py

import random
import hashlib

def lucky_hash(seed):
    num1 = random.randint(10,100)
    num2 = seed * num1

    hash = hashlib.sha1(
        str(num2).encode('utf-8')
    ).hexdigest()

    print(hash)
    return hash

在这里插入图片描述


安装并配置IDE

虽然 ipdb 已经把控制台的体验提升到了很高的水平,但与IDE相比,那还是属于两个不同维度的世界。Python开发IDE可能很多人首推Pycharm,不过我还是喜欢纯Free。早些年有个Aptana Studio,不过现在当然是选 Visual Studio Code 了。另外据网络传言,高手都用vim(我试了一下,控制台环境下不行,应该还是需要图形化环境……)。

VSCode安装就不赘述了,主要是需要安装各种扩展。除了必要的Python扩展,还推荐至少安装:JSON ToolsXML ToolsPartial DiffHex Editor

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


常用VSCode快捷键

Alt + Shift + 鼠标:列选择模式。
Alt + ←Alt + →:在用 Ctrl + Click 跟踪代码时后退与前进。
Ctrl + Shift + T:重新打开最近关闭的文档。
Alt + Shift + F:格式化文档。
Ctrl + K, Ctrl + 0:折叠所有代码。
Ctrl + K, Ctrl + J:展开所有代码。
Ctrl + K, Ctrl + C:注释选中的代码。
Ctrl + K, Ctrl + U:取消选中代码的注释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值