Linux 下依赖库的问题
假设你在 某用户 user_name 下安装了一个 rquests库。
然后你在命令行使用 python3 -c (...)验证。发现没有任何问题。
然后你使用python3 xxx.py 发现执行验证也没有问题。
这个时候你信心慢慢的写了一个C的代码在代码中system调用这个.py文件。
然后执行: sudo ./a.out
结果:
>>> import requests Traceback (most recent call last): File "<stdin>", line 1, in <module> ModuleNotFoundError: No module named 'requests
为啥捏??
因为你的request在你的用户工作目录下,但是sudo会更改工作目录,python找不到你的模块了。
那直接sudo install requests全局安装不完了嘛?
对!但不完全对。 在root下安装各种依赖库还是非常危险的,容易版本冲突。
那咋办呢?
这就是主题了:
Python下的虚拟环境:
可以这样比喻:假设你有一台电脑,系统自带的Python环境是“公共厨房”,所有用户(包括root)都在这里做饭。而虚拟环境就像是你自己在厨房里搭建的一个“独立料理台”,所有食材(依赖库)和厨具(解释器)都放在这个台子上,不会和其他人的混用。
创建方法:
# 创建虚拟环境
python3 -m venv venv# 激活虚拟环境
source venv/bin/activate# 安装依赖(仅在此环境中生效)
pip install requests# 退出虚拟环境
deactivate
-
python3 -m venv venv
-
这会在当前目录下创建一个名为
venv
的文件夹。 -
该文件夹内包含:
-
一个独立的Python解释器副本(
venv/bin/python
)。 -
一个独立的库安装目录(
venv/lib/python3.x/site-packages
),所有通过pip install
安装的库会放在这里。
-
-
效果:这个环境与系统的Python环境完全隔离。
-
-
source venv/bin/activate
激活虚拟环境后,命令行提示符通常会显示环境名称(如(venv)
)。 -
deactivate
退出虚拟环境,恢复使用系统默认的Python环境。
最后记得,在调用的地方不能直接 system(“python ...”),要使用这里的python:
system("/home/username/project/venv/bin/python Upload.py");