本文解决报错问题有:
1 执行source .bashrc报错 Command ‘‘ not found, but can be installed with:
2 虚拟环境下安装django一直报错 raise ReadTimeoutError(self._pool, None, "Read timed out.")
3 已安装成功Django,import时依然提示ImportError: No module named Django
一、为何需要虚拟环境?
在开发过程中,当需要使用 python 的某些工具包/框架时需要联网安装。
sudo pip install django==2.2.5
使用如上命令,会将Django安装到 /usr/local/lib/python版本号/dist-package路径下面
如果在一台电脑上,想开发多个不同的项目,需要用到同一个包的不同版本
如果使用上面的命令,在同一个目录下安装或者更新,新版本会覆盖以前的版本其它的项目就无法运行了
这个时候,就需要虚拟环境了!
- 虚拟环境可以搭建独立版本的 python 运行环境,使得各个版本之间不会互相影响
- 所有的虚拟环境,都位于 /home/ 下的 隐藏目录 .vortualenvs 下面 (自己建立的)
1 安装虚拟环境
sudo pip install virtualenv
sudo pip install virtualenvwrapper
2 创建目录存放虚拟环境
mkdir $HOME/.virtualenvs
cd $HOME/.virtualenvs 可以进入就是创建成功
3 打开 ~/.bashrc 文件,添加下面内容:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
然后运行 source ~/.bashrc
执行source .bashrc报错
Command ‘‘ not found, but can be installed with:
解决方案:
将上面的两行换为:
export VIRTUALENVWRAPPER_PYTHON='/usr/bin/python3'
source /usr/local/bin/virtualenvwrapper.sh
第一行的路径是python3路径,使用 which python3 命令查看
然后运行 source ~/.bashrc,就成功了!
4 新建一个python3 的虚拟环境
mkvirtualenv -p python3 py3_test_01 # 创建成功就默认进入该虚拟环境
- py3_test_01 就是这个虚拟环境的名字
- 创建虚拟环境,必须联网
- -p python3 指定版本
- 创建成功就默认进入该虚拟环境
workon 命令,可以查询虚拟环境
workon + 虚拟环境名字 # 切换虚拟环境
rmvirtualenv + 虚拟环境名字 # 删除虚拟环境
不能删除正在使用的虚拟环境
应该先退出虚拟环境, deactivate 然后删除
5 虚拟环境可以正常安装其它工具包,但是需要首先进入虚拟环境,
例如:安装 Django
进入对应的虚拟环境,然后安装(需要联网)
sudo pip install django==2.2.5
但是虚拟环境下安装django一直报错
raise ReadTimeoutError(self._pool, None, "Read timed out.")
raise ReadTimeoutError(self._pool, None, "Read timed out.")
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
报错部分如下:
File "/usr/lib/python3/dist-packages/pip/_internal/utils/ui.py", line 160, in iter
for x in it:
File "/usr/lib/python3/dist-packages/pip/_internal/network/utils.py", line 15, in response_chunks
for chunk in response.raw.stream(
File "/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl/urllib3/response.py", line 564, in stream
data = self.read(amt=amt, decode_content=decode_content)
File "/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl/urllib3/response.py", line 529, in read
raise IncompleteRead(self._fp_bytes_read, self.length_remaining)
File "/usr/lib/python3.8/contextlib.py", line 131, in __exit__
self.gen.throw(type, value, traceback)
File "/usr/share/python-wheels/urllib3-1.25.8-py2.py3-none-any.whl/urllib3/response.py", line 430, in _error_catcher
raise ReadTimeoutError(self._pool, None, "Read timed out.")
urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Read timed out.
请求网络超时,主要是因为网络(我下载时是热点且信号不好)和源的问题。
解决方法:
1 设置一下超时时间
pip --default-timeout=100 install -U pip
然后就成功了!
2 如果方法1还是不行,就更换源为阿里源或者清华源
pip install django -i https://mirrors.aliyun.com/pypi/simple/
查看安装的 django 版本
python -m django --version
No module named django 报错
虚拟环境显示没有安装,重新执行安装命令,又显示已经安装了
执行 pip list 发现没有 django
原因:django安装的包在python的默认路径下。
而 并没有 安装在 虚拟环境中 !!!
(py3_test_01) root@hecs-401527:~/.virtualenvs# sudo pip install django==3.2.13
Requirement already satisfied: django==3.2.13 in /usr/local/lib/python3.8/dist-packages (3.2.13)
Requirement already satisfied: asgiref<4,>=3.3.2 in /usr/local/lib/python3.8/dist-packages (from django==3.2.13) (3.6.0)
Requirement already satisfied: pytz in /usr/local/lib/python3.8/dist-packages (from django==3.2.13) (2023.3)
Requirement already satisfied: sqlparse>=0.2.2 in /usr/local/lib/python3.8/dist-packages (from django==3.2.13) (0.4.4)
尝试:重新建立一个虚拟环境,然后下载 django新的一个版本 依旧无效
此时,发现在xshell终端建立的虚拟环境,在华为云控制台的终端连接根本找不到,
所以不同的终端也是有影响的,后面在华为云终端进行的操作
No module named django 报错 解决方法:
打开 ~/.bashrc 文件,添加下面内容:
export WORKON_HOME=$HOME/.virtualenvs
VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3
source /usr/local/bin/virtualenvwrapper.sh
export PATH=$HOME/.local/bin:$PATH
很关键的四行!!!!
然后 source ~/.bashrc
然后删除虚拟环境,重新建立一个,然后下载django
随后 pip list 成功!
至此,django 在虚拟环境就安装成功了!