背景
在网上跟着教程用Django搭建了个blog,准备在Ubuntu上部署。
项目代码已经git clone下来了。使用sudo pip3 install virtualenv
安装虚拟环境,然后 cd 到项目目录的上一级,使用sudo virtualenv env01
创建虚拟环境。
问题
cd 到项目文件里,使用python3 manage.py collectstatic
时报错了,为No module named 'django'
,于是我使用sudo pip3 install django
安装Django,发现之前确实没有安装Django。
安装完后,继续使用python3 manage.py collectstatic
仍然显示No module named 'django'
。
解决过程
我使用sudo python3
进入控制台。
import sys
print(sys.path)
"""输出
['', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/home/sites/blog/env01/lib/python3.10/site-packages']
"""
# 通过安装Django的信息发现Django安装在 /usr/local/lib/python3.10/dist-packages/ ,不在环境变量里。
sys.path.append('/usr/local/lib/python3.10/dist-packages/')
print(sys.path)
"""输出
['', '/usr/lib/python310.zip', '/usr/lib/python3.10', '/usr/lib/python3.10/lib-dynload', '/usr/local/lib/python3.10/dist-packages', '/usr/lib/python3/dist-packages', 'usr/local/lib/python3.10/dist-packages']
"""
# 添加到环境变量里了,然后退出控制台。
exit()
再次python3 manage.py collectstatic
,还是显示No module named 'django'
。
然后我意识到,也许我的虚拟环境里没有Django,通过cd /home/sites/blog/env01/lib/python3.10/site-packages
,ls
查看到目录_distutils_hack setuptools-65.3.0.dist-info distutils-precedence.pth setuptools-65.3.0.virtualenv pip _virtualenv.pth pip-22.2.2.dist-info _virtualenv.py pip-22.2.2.virtualenv wheel pkg_resources wheel-0.37.1.dist-info setuptools wheel-0.37.1.virtualenv
,确实没有Django。
于是我使用sudo pip3 install --target=/home/sites/blog/env01/lib/python3.10/site-packages django
,将Django安装到虚拟环境中。
完成后,python3 manage.py collectstatic
,问题解决了。
总结
使用虚拟环境时,要用sudo pip3 install --target=虚拟环境的包目录 要安装的的包
来安装包。