MAC笔记本里Spyder python 的安装问题 和 虚拟环境VENV的创建
芙Spyder 作为python的开发环境还是很好用的,在MAC笔记本里直接下载Spyde安装即可。
安装完成以后目录在:
/Applications/Spyder.app/Contents
此目录下有几个子目录如下:
Frameworks Info.plist MacOS PkgInfo Resources _CodeSignature
其中可执行文件Spyder和python在MacOS的子目录下;
资源包都在Resouces子目录下
如果在MacOS目录下执行python命令,会出现报错;但是在Spyder的GUI界面里运行python代码是没问题的。
./python
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Python path configuration:
PYTHONHOME = (not set)
PYTHONPATH = (not set)
program name = './python'
isolated = 0
environment = 1
user site = 1
import site = 1
sys._base_executable = '/Applications/Spyder.app/Contents/MacOS/python'
sys.base_prefix = '/Users/runner/hostedtoolcache/Python/3.9.14/x64'
sys.base_exec_prefix = '/Users/runner/hostedtoolcache/Python/3.9.14/x64'
sys.platlibdir = 'lib'
sys.executable = '/Applications/Spyder.app/Contents/MacOS/python'
sys.prefix = '/Users/runner/hostedtoolcache/Python/3.9.14/x64'
sys.exec_prefix = '/Users/runner/hostedtoolcache/Python/3.9.14/x64'
sys.path = [
'/Users/runner/hostedtoolcache/Python/3.9.14/x64/lib/python39.zip',
'/Users/runner/hostedtoolcache/Python/3.9.14/x64/lib/python3.9',
'/Users/runner/hostedtoolcache/Python/3.9.14/x64/lib/lib-dynload',
]
Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
ModuleNotFoundError: No module named 'encodings'
Current thread 0x00007ff8544c7700 (most recent call first):
原因是 PYTHONHOME没设置,可以通过对环境变量PYTHONHOME设置来解决这个问题。
MAC下的zsh terminal的环境配置文件在/Users/用户名/.zshrc。 (用户级的环境文件)
使用vim编辑.zshrc文件
vim ~/.zshrc
在文件末尾输入:
export PYTHONHOME=/Applications/Spyder.app/Contents/Resources
保存后,再执行:
source ~/.zshrc
通过export命令查看环境变量里是否有PYTHONHOME的设置,如果设置成功,那么可以解决上述问题。
另外,如果用的是bash,可以编辑 ~/.bash_profile (,/etc/profile对所有用户生效,~/.bash_profile只对当前用户生效。)
另外环境变量PATH的配置命格式:
export PATH=$PATH:<PATH 1>:<PATH 2>:<PATH 3>:...:<PATH N>
虚拟环境VENV的介绍:
python3.3以后安装包自带VENV工具,可以用来配置python虚拟环境
虚拟环境的主要使用场景是:如果有两个不同的project需要用到同一个包package的不同版本,比如project1用到version1,project2用到version2。那么需要给不同project安装不同的版本。
具体用法:此时就需要用到VENV,
在project1的目录下执行命令:
python3 -m venv .venv
此时在目录下会创建一个.VENV的子目录,包含以下文件/文件夹:
bin include lib pyvenv.cfg
其中bin文件夹下:python,pip 等可执行文件
lib文件夹下: 有site-packages,里面的包几乎为空
从上面可以看出,VENV工具基于已经安装的python环境,从中选取一些必须的文件,安装到这个project的当前目录下的.venv目录下,创建了一个封闭的运行环境,里面有必须的python命令和site-packages。
然后用户在当前目录下再执行下面命令,激活虚拟环境,
source .venv/bin/activate
此时再使用pip安装当前project需要的packages。例如下面命令,可以指定需要安装的packages的版本:
python3 -m pip install 'requests==2.18.4'
这个package会被安装在当前工程的目录下面的.venv下的site-packages子目录里,这样就不会和别的project共享package,实现了文件隔离。
在project的当前目录下执行下面命令,可以关闭虚拟环境:
deactivate
附上python官网对于虚拟环境操作说明如下:
Install packages in a virtual environment using pip and venv - Python Packaging User Guide
linux/MACos下pip的安装:
-
方法一:
-
Download the script, from https://bootstrap.pypa.io/get-pip.py.
-
python get-pip.py
-
方法二:
-
python -m ensurepip --upgrade
- pip升级
python -m pip install --upgrade pip