Python 项目和虚拟环境
以下内容适用于本人的 Mac OS。部分代码不适合直接作用在 Windows 或者其他系统。
1. 项目
项目(Project)一般是一群文件的集合。
其作用是第二次打开项目后不用重新寻找文件路径,直接回到上次文件目录位置,并且打开上次打开的那几个文件。从而帮助恢复到上次的工作状态。
因此,应该为每个项目创建一个独立的文件夹和目录。或者使用 VS code 直接打开某个文件夹,VS Code会自动将该文件夹识别为一个 Workspace。
-
在 R 和 Matlab 上,有项目(Project)这一概念,只需要点击菜单栏选择创建项目即可。R 和 Matlab 会在选定的文件夹中,用一个配置文件 (
.Rproj,.prj) 来记录该项目。 -
在 Spyder 上,也有项目(Project)这一概念,只需要点击菜单栏选择创建项目即可。Spyder 会在选定的文件夹中,用一个文件夹 (
.spyproject) 来记录该项目。 -
在 VS Code 和 Positron 中,没有项目这一概念,但是有一个类似的概念,Workspace。VSCode中对于 Workspace 的定义就是一个文件夹,不会专门为了这个文件夹追加一个配置文件来记录该 workspace。除非是 多根工作区,会有一个
.code-workspace文件。
2. 虚拟环境
虚拟环境是一个库和包的集合。 其作用是为不同的项目提供不同的“工具箱”。
可以为每一个项目单独创建一个虚拟环境,来保证该项目只调用该虚拟环境中的库和包,从而保证该项目和其他项目之间的库和包版本不会互相冲突。
但是因为 数据分析 常用的包和库比较固定,所以可以只配置一个虚拟环境然后将多个项目都链接到该虚拟环境。
创建虚拟环境
-
方法1: 使用终端和
venv:在终端运行python -m venv venv,即可自动创建一个虚拟环境。但是该环境此时并未激活,Mac OS 使用代码source venv/bin/activate来激活该虚拟环境。python: 调用 Python 解释器。
-m: 这是一个参数,告诉 Python:“我要运行一个模块(module)”。
第一个venv: 这是模块的名字。它是 Python 内置的一个专门用来”创建虚拟环境的工具”。
第二个venv: 这是虚拟环境的文件夹名称。 -
方法2: 在 vscode 中,可以直接使用
Shift + Command + P调出命令面板(Command Palette),然后搜索并选择,Python: Create Environment...,然后按提示操作即可。也可以使用终端和
conda(如果你使用 Anaconda)来创建虚拟环境。本系统使用 Homebrew,为避免路径冲突,因此不使用 conda 来管理虚拟环境。
使用虚拟环境
-
如果虚拟环境文件夹放在项目文件夹的根目录中,用 VScode 打开该文件夹,会自动识别到该虚拟环境。在终端 Terminal 里面可以看到
(.venv) __用户名__MacBook-Pro __文件夹名__ %,前面的(.venv)表示现在位于名叫(.venv)的虚拟环境中。如果VSCode 没有自动识别,那么使用
source .venv/bin/activate可以激活该虚拟环境。(.venv)是虚拟环境文件夹名称。 -
Spyder 中,点击底部状态栏的 Python,即可选择改变默认环境,选择某个虚拟环境中的python解释器即可。
注意:该虚拟环境中需要安装 spyder-kernels 才能被 Spyder 正确链接并使用。在虚拟环境中安装
pip install spyder-kernels,或者直接指定虚拟环境文件夹安装/Users/你的用户名/Documents/my_project/.venv/bin/python -m pip install [包名]。注意:Spyder 内置一个环境,所以打开Spyder之后能在底部的状态栏确认到当前的python解释器版本。该内置环境是整合在 Spyder app 中的,因此使用spyder的时候,即便不使用虚拟环境,也不会对系统环境和其他环境造成影响,但是该环境自带包比较少。虽然可以安装包(在console中使用
%pip install,比Terminal中多了一个%),但是无法使用requirements.txt移植给其他用户。并且很难让vscode自动选择到这个虚拟环境中。
Python 解释器的选择
计算机无法认识什么是环境,系统只认识路径。因为环境是一个抽象的概念,是一群文件和文件夹的组合。因此,选择一个虚拟环境其实是选择那个环境中(也就是文件夹中)包含的 Python 解释器。
在 .venv 文件夹中,一般会有一个 Python 解释器的拷贝或者是快捷方式。选择该文件夹下的 .../.venv/bin/python3.11 解释器即可使用该虚拟环境。
一台电脑上通常有多个 Python 解释器。可以通过文件夹名称来判断某个 python 解释器位于什么环境中。一般来说,Mac OS 存在于 usr/bin/... 目录下的程序是系统内置程序。比如,位置在 usr/bin/python3 意味着系统内置 python。
系统内置Python是为了维持系统运行的,最好不要对其进行任何改动,也不用来做数据分析。
3. 总结
目前不使用系统自带的 Python 解释器,也不使用 Spyder 自带的 Python 解释器。主要使用 Homebrew 安装的 /opt/homebrew/bin/python3 Python 解释器。
4. 备注
确认电脑上已经存在的程序版本
python --version: 确认 python 2 的版本
python3 --version: 确认 python 3 的版本
ruby --version
git --version
确认目前默认使用的各个程序的存储位置
which python
which python3
which ruby
which git
Homebrew
可以用
brew list
brew list | grep python
来查看安装了的内容。
在终端激活虚拟环境
首先进入到需要的文件夹,比如文件夹名为 MyProject
cd ~/Documents/Python/MyProject
这里的 ~ 是一个快捷方式,代表你的用户主目录(例如 /Users/你的用户名)。
然后使用
source .venv/bin/activate
激活虚拟环境.
安装spyder-kernels包
pip install spyder-kernels
deactivate 退出虚拟环境
在你的项目文件夹中,ls -a 命令可以列出所有文件和文件夹,方便你确认 .venv 是否存在。
ls 表示list,列出所有文件和文件夹,除了被隐藏的。ls -a 表示列出包括被隐藏的,所有的文件和文件夹。
虚拟环境打包
显示当前环境中已经安装的包
pip list
数据分析完成时,或者将自己的代码分享给别人时,可以通过
pip freeze > requirements.txt
代码,来生成一个本环境中所有的库和包的list。
其他人拿到之后,只需要执行
pip install -r requirements.txt
就能根据这个list自动下载所有的包和库,重建一个同样的环境