linux上部署Django项目

首先创建一个简易的Django项目

使用自动生成的这个数据库

压缩上传

解压运行,不可以

[root@mcw1 /opt/mcwtest]$ ls
app01 db.sqlite3 manage.py mcwtest __pycache__ templates
[root@mcw1 /opt/mcwtest]$ ls
app01 db.sqlite3 manage.py mcwtest __pycache__ templates
[root@mcw1 /opt/mcwtest]$ python3 manage.py runserver
Traceback (most recent call last):
File "manage.py", line 11, in main
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django' The above exception was the direct cause of the following exception: Traceback (most recent call last):
File "manage.py", line 22, in <module>
main()
File "manage.py", line 17, in main
) from exc
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?

把虚拟环境也打包上传

不行啊,解释器操作系统不一致,不能用

编译安装python3和sqlite3

[root@mcw1 /opt]$ ls
jdk jpype mcw mcwtest.zip openssh-8.8p1 openssl openssl-1.1.1l.tar.gz tomcat_mcw1
jieshiqi machangwei.py mcwtest openssh openssh-8.8p1.tar.gz openssl-1.1.1l Python-3.6.12.tgz
[root@mcw1 /opt]$ tar xf Python-3.6.12.tgz
[root@mcw1 /opt]$ ls
jdk jpype mcw mcwtest.zip openssh-8.8p1 openssl openssl-1.1.1l.tar.gz Python-3.6.12.tgz
jieshiqi machangwei.py mcwtest openssh openssh-8.8p1.tar.gz openssl-1.1.1l Python-3.6.12 tomcat_mcw1
[root@mcw1 /opt]$ cd Python-3.6.12/
[root@mcw1 /opt/Python-3.6.12]$ mkdir /opt/python3
[root@mcw1 /opt/Python-3.6.12]$ ls
aclocal.m4 config.sub configure.ac Grammar install-sh LICENSE Makefile.pre.in Modules Parser PCbuild pyconfig.h.in README.rst Tools
config.guess configure Doc Include Lib Mac Misc Objects PC Programs Python setup.py
[root@mcw1 /opt/Python-3.6.12]$ ./configure --prefix=/opt/python3
config.status: creating pyconfig.h
creating Modules/Setup
creating Modules/Setup.local
creating Makefile If you want a release build with all stable optimizations active (PGO, etc),
please run ./configure --enable-optimizations

编译部分过程

已编译安装好并且能进入

将现有的site-package备份,用windows传上来的直接替换

[root@mcw1 /opt]$ python3/bin/python3
Python 3.6.12 (default, Dec 17 2021, 07:14:00)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
[root@mcw1 /opt]$ mv python3/lib/python3.6/site-packages python3/lib/python3.6/site-packages_bak
[root@mcw1 /opt]$ cp -a jieshiqi/mcwtest/
Include/ Lib/ pip-selfcheck.json pyvenv.cfg Scripts/
[root@mcw1 /opt]$ cp -a jieshiqi/mcwtest/Lib/site-packages python3/lib/python3.6/
[root@mcw1 /opt]$ python3/bin/python3
Python 3.6.12 (default, Dec 17 2021, 07:14:00)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
[root@mcw1 /opt]$

现在有Djongo了,但是还报错

[root@mcw1 /opt/mcwtest]$ /opt/python3/bin/python3  manage.py runserver
Watching for file changes with StatReloader
Exception in thread django-main-thread:
Traceback (most recent call last):
File "/opt/python3/lib/python3.6/threading.py", line 916, in _bootstrap_inner File "/opt/python3/lib/python3.6/sqlite3/__init__.py", line 23, in <module>
from sqlite3.dbapi2 import *
File "/opt/python3/lib/python3.6/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ModuleNotFoundError: No module named '_

从这里下载一个sqlite源码包:https://www.sqlite.org/download.html

编译安装到sqlite3目录下

[root@mcw1 /opt]$ ls sqlite
sqlite3/ sqlite-autoconf-3370000/ sqlite-autoconf-3370000.tar.gz
[root@mcw1 /opt]$ ls sqlite

备份并修改python源码包中的setup文件

[root@mcw1 /opt]$ ls Python-3.6.6
aclocal.m4 config.status Doc Lib Makefile Modules PCbuild pyconfig.h.in python-config.py setup.pybak
build config.sub Grammar libpython3.6m.a Makefile.pre Objects Programs python python-gdb.py Tools
config.guess configure Include LICENSE Makefile.pre.in Parser pybuilddir.txt Python README.rst
config.log configure.ac install-sh Mac Misc PC pyconfig.h python-config setup.py
[root@mcw1 /opt]$ ls Python-3.6.6/setup.py
Python-3.6.6/setup.py

[root@mcw1 /opt]$ grep sqlite -C 5 Python-3.6.6/setup.py
if db_setup_debug: print("db: no appropriate library found")

在setup文件中添加sqlite编译安装的目录文件信息。然后重新编译安装python3.6

重新编译安装python3.6之后,继续运行任务

报错:

[root@mcw1 /opt]$ python3/bin/python3 mcwtest/manage.py runserver
Traceback (most recent call last):
File "mcwtest/manage.py", line 11, in main
from django.core.management import execute_from_command_line
ModuleNotFoundError: No module named 'django' The above exception was the direct cause of the following exception: Traceback (most recent call last):
File "mcwtest/manage.py", line 22, in <module>
main()
File "mcwtest/manage.py", line 17, in main
) from exc
ImportError: Couldn't import Django. Are you sure it's installed and available on your PYTHONPATH environment variable? Did you forget to activate a virtual environment?
[root@mcw1 /opt]$

解决方法:将刚刚编译安装好的python3.6.6的site-package目录备份,然后用windows的pycharm项目使用的解释器中的site-package目录,直接复制过去替代原来的

[root@mcw1 /opt]$ mv python3/lib/python3.6/site-packages/ python3/lib/python3.6/site-packages_bak
[root@mcw1 /opt]$ cp -a jieshiqi/mcwtest/Lib/site-packages/ python3/lib/python3.6/site-packages
[root@mcw1 /opt]$ python3/bin/python3 mcwtest/manage.py runserver
Watching for file changes with StatReloader
Performing system checks... System check identified no issues (0 silenced).
December 17, 2021 - 01:46:37
Django version 3.2.10, using settings 'mcwtest.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
^C[root@mcw1 /opt]$

运行程序

访问页面

Invalid HTTP_HOST header: '10.0.0.131:8000'. You may need to add '10.0.0.131' to ALLOWED_HOSTS.

安装上面的报错信息提示,修改添加项目配置,允许本机ip访问

然后再次运行项目

至少能访问到页面了

将编译安装在/opt/下的python环境,sqlite3,以及我们的项目目录都传到mcw02主机上。看复制文件是否就能实现djonge项目在其它主机运行。

将项目复制到其它主机,修改主机ip配置,但是无法运行起项目来

[root@mcw2 ~]# ls /opt/
[root@mcw2 ~]# cd /opt/
[root@mcw2 opt]# ls
mcwtest python3 sqlite3
[root@mcw2 opt]# hostname -I
10.0.0.132 172.16.1.132
[root@mcw2 opt]# vim mcwtest/mcwtest/settings.py
[root@mcw2 opt]# grep -i host mcwtest/mcwtest/settings.py
ALLOWED_HOSTS = ["10.0.0.132"]
[root@mcw2 opt]# python3/bin/python3 mcwtest/manage.py runserver 0.0.0.0:8000
Watching for file changes with StatReloader
Exception in thread django-main-thread:
.......
File "/opt/python3/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 73, in <module>
check_sqlite_version()
File "/opt/python3/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 69, in check_sqlite_version
'SQLite 3.9.0 or later is required (found %s).' % Database.sqlite_version
django.core.exceptions.ImproperlyConfigured: SQLite 3.9.0 or later is required (found 3.7.17).

sqlie数据库,貌似是不用起进程的,这里编译安装好就行,连接的库也不是这里。而且项目已经连接的数据库,是从pycharm那里运行项目时自动生成的那个sqlite3数据库。还在项目的根目录下,并且能正常使用。

之前上面那个问题解决方法:备份源码,并修改源码,支持当前版本sqlite

查看到报错位置有个检查版本的函数,原来是3,9,0比较。而我的sqlite版本是3.7的,所以我就改了版本比较数为3,3,0.这样就不会因为版本低而无法运行项目了。或许你可以去重新编译安装sqlite版本为3.9以上,但是不只是花时间,而且我自己也没有在官网找到这个版本的包,我3.7已经是下载的最新版本sqlite了。

def check_sqlite_version():
if Database.sqlite_version_info < (3, 3, 0):
raise ImproperlyConfigured(
'SQLite 3.3.0 or later is required (found %s).' % Database.sqlite_version
)

修改以后,在mcw02主机上重新运行项目,正常运行

然后页面访问迁移到mcw02主机的项目,成功访问。至此,完成了将项目从windows上移到linux上,又从linux上移到到其它linux上。至于为什么要再从linux上移到其它linux上,这是因为生产环境我们尽量不弄乱它的环境。而这里我们可用在windows上开发,在虚拟机上调试好三个目录,能正常运行,然后可以打包直接去生产上解压运行,只是占三个目录,并不会影响到其它目录或者部署的东西到其它目录下。互不干扰。如果python是用虚拟环境的方式,那么需要使用命令创建虚拟环境,暂时对这个没深入研究,害怕创建虚拟环境影响到其它程序使用python,或者自己弄自己的虚拟环境,不小心把其它的虚拟环境也弄坏了,而这个编译安装的python,独自有自己的目录,修改啥的也对其它程序影响小很多;如果sqlite使用的是mysql,那么需要起一个mysql进程,这样会占用资源比较多,而sqlie却没有起进程,就在那个目录下,对其它程序影响小

编译安装的是可以迁移其它目录和主机的

如果是编译安装的python和 sqlite等,编译安装指定某个目录后,直接打包目录,不只是能跨主机,也是能跨目录的,不是非要在编译安装的目录才能使用

比如下面这个,python3和sqlite都是编译安装到/opt目录下的,但是直接打包放到别的目录或者别的主机,照样可以运行程序

Django项目windows上开发,虚拟机上调通打包,生产环境解压即用的更多相关文章

  1. # 【ARM-Linux开发】在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): 【Linux开发】 --- > 一段时间以来,一直是在Windows上安装虚拟机

    [ARM-Linux开发]在Win7的电脑上直接运行安装Ubuntu14.04发生的问题 标签(空格分隔): [Linux开发] 一段时间以来,一直是在Windows上安装虚拟机,然后安装Ubuntu ...

  2. 怎么在自己的windows上创建虚拟机(linux centos7)

    怎么在自己的windows上创建虚拟机(linux centos7) 作为一个非科班出身自学的小白,踩过很多的坑,特此留下记录 宿主机:windows10系统 8G 64位操作系统 虚拟机:linux ...

  3. 在Windows上安装虚拟机详细图文教程

    用虚拟机来安装最新的软件,安装最新的系统等等比较保险,可以避免安装不顺利影响自己原来的系统和应用,想尝鲜又担心自己完全更换系统不适应的朋友可以尝试. 虚拟机下载:https://yunpan.cn/c ...

  4. windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  5. 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置

    第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本  uwsgi- ...

  6. 第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置

    第三百九十八节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5系统环境设置 1.Linux安装配置 注意事项: 虚拟机网卡桥接模式 不要拨VPN 如果,网络怎么都 ...

  7. 第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块

    第四百零一节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署virtualenv虚拟环境安装,与Python虚拟环境批量安装模块 virtualenv简介 1.安装virtuale ...

  8. 第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6

    第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6 1.检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则第4步 ...

  9. 第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1

    第四百节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装python3.5.1 1.检查系统是否安装了python [root@192 ~]# rpm -qa ...

  10. Python和Django在Windows上的环境搭建

    作为一个.NET程序员,真心不喜欢Python以及PHP这种松散的语法.有人说,程序员应该多学几门语言,本想学习Java,无奈感觉Java的语法太啰嗦了.很多人都推荐Python,说它的语法简洁,执行 ...

随机推荐

  1. mysql交集查询按照时间范围查询myBatis

    查询  开始时间 --结束时间 <if test="searchParam.startTime != null and searchParam.endTime != null" ...

  2. TensorRT C# API 项目更新 (1):支持动态Bath输入模型推理

    1. 项目介绍    NVIDIA TensorRT 是一款用于高性能深度学习推理的 SDK,包括深度学习推理优化器和运行时,可为推理应用程序提供低延迟和高吞吐量.基于 NVIDIA TensorRT ...

  3. 堆结构(Heap)的基本实现【数据结构与算法—TypeScript 实现】

    笔记整理自 coderwhy 『TypeScript 高阶数据结构与算法』课程 概念 本质:一种特殊的树结构,由 完全二叉树 实现 多数情况为二叉堆 二叉堆:最大堆.最小堆 最大堆:堆上的每个节点都的 ...

  4. go语言结构体使用小结

    转载请注明出处: 在Go语言中,结构体(struct)是一种复合数据类型,它允许你将多个不同类型的字段组合成一个单一的类型.结构体为数据的封装和抽象提供了便利,使得数据组织更加清晰和易于管理. 结构体 ...

  5. Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':classpath'.

    前言 这个错误怎么看呢? 如果你对gradle 不是很了解的话,有一个建议,就是把异常背下来,当然是看这个:ArtifactResolveException哈. 而不是后面的详情. 正文 给我们详情是 ...

  6. uniapp中实现简易计算器

    uniapp中实现简易计算器主要问题:在计算器的实现过程中会遇到小数点计算精度:此计算器是依赖了uni-popup的弹出层插件,可在uniapp官方组件中查找扩展插件popup弹窗层下载,也可直接点击 ...

  7. ES6中Module以及使用场景

    一.介绍 模块,(Module),是能够单独命名并独立地完成一定功能的程序语句的集合(即程序代码和数据结构的集合体). 两个基本的特征:外部特征和内部特征 外部特征是指模块跟外部环境联系的接口(即其他 ...

  8. 《Effective C#》系列之(四)——最小化内存泄露和资源占用

    一.内存泄露 在<Effective C#>这本书中,最小化资源泄漏是其中一章的内容.以下是该章节的一些核心建议,以及使用C#代码示例说明: 及时释放非托管资源:在使用非托管资源时,需要手 ...

  9. 国内首家!百度智能云宣布支持Llama3全系列训练推理

    继18日Llama3的8B.70B大模型发布后,百度智能云千帆大模型平台19日宣布在国内首家推出针对Llama3全系列版本的训练推理方案,便于开发者进行再训练,搭建专属大模型,现已开放邀约测试. 目前 ...

  10. 力扣262(MySQL)-行程和用户(困难)

    题目: 表:Trips 表:Users 取消率 的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数). 写一段 SQL 语句查出 "2013-10 ...