只看不说 發表於 2020-5-20 09:49:00

python之(6)如何把python项目部署到linux服务器上

<p>&nbsp;</p>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="944" data-height="742"><img src="https://upload-images.jianshu.io/upload_images/7289495-71502631b28b5fbe.png?imageMogr2/auto-orient/strip|imageView2/2/w/944/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/7289495-71502631b28b5fbe.png" data-original-width="944" data-original-height="742" data-original-format="image/png" data-original-filesize="67256" data-image-index="0"></div>
</div>
</div>
<h1>一、背景</h1>
<p>用Python写了个脚本,需要部署到Linux环境的服务器上,由于服务器linux系统(centos,redhat等)自带的是python2,现在的python萌新都是从python3开始学习,所以需要给服务器配置一个python3环境,一番摸索过后,踩过一些坑,也总结了一下经验,故留此文。</p>
<h1>二、主要应用技术</h1>
<h2>2.1、linux 命令</h2>
<div class="image-package">
<div class="image-container">
<div class="image-container-fill">&nbsp;</div>
<div class="image-view" data-width="511" data-height="710"><img src="https://upload-images.jianshu.io/upload_images/7289495-0e47261aec43c05f.png?imageMogr2/auto-orient/strip|imageView2/2/w/511/format/webp" alt="" data-original-src="//upload-images.jianshu.io/upload_images/7289495-0e47261aec43c05f.png" data-original-width="511" data-original-height="710" data-original-format="image/png" data-original-filesize="236783" data-image-index="1"></div>

</div>
<div class="image-caption">linux命令速查表</div>

</div>
<h1>三、实施步骤</h1>
<h2>3.1、安装python3</h2>
<p>开始安装之前先看一下机器的环境,主要看一下操作系他的环境和python版本。<br>查看环境<br>操作系统:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation">#cat <span class="token operator">/etc<span class="token operator">/redhat<span class="token operator">-release
<span class="token class-name">CentOS release <span class="token number">6.5 <span class="token punctuation">(Final<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>查看python版本:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"># python -V
Python 2.6.6
</code></pre>
</div>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-bash"><code class="language-bash"># python3 -V
-bash: python3: command not found
</code></pre>
</div>
<p>可以看到操作系统是CentOS 6.5 ,python此时只有一个python2,没有python 3 。</p>
<p>下面开始进入正式安装:<br>第1步:下载python安装包,准备编译环境:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"># yum install zlib<span class="token operator">-devel bzip2<span class="token operator">-devel openssl<span class="token operator">-devel ncurses<span class="token operator">-devel sqlite<span class="token operator">-devel readline<span class="token operator">-devel tk<span class="token operator">-devel gcc make
</span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第2步:下载python源码</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-cpp"><code class="language-cpp"><span class="token punctuation"># wget https<span class="token operator">:<span class="token operator">/<span class="token operator">/www<span class="token punctuation">.python<span class="token punctuation">.org<span class="token operator">/ftp<span class="token operator">/python<span class="token operator">/<span class="token number">3.6<span class="token number">.6<span class="token operator">/Python<span class="token operator">-<span class="token number">3.6<span class="token number">.6<span class="token punctuation">.tgz
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第3步:解压</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"># tar -zxvf Python-3.6.6.tgz
</code></pre>
</div>
<p>第4步:安装,编译</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"># cd Python<span class="token operator">-<span class="token number">3.6<span class="token number">.2
<span class="token punctuation"> # mkdir <span class="token operator">/usr<span class="token operator">/local<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6
<span class="token punctuation"> # <span class="token punctuation">.<span class="token operator">/configure <span class="token operator">--prefix<span class="token operator">=<span class="token operator">/usr<span class="token operator">/local<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6
<span class="token punctuation"> # make
<span class="token punctuation"> # make install
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第5步:建立软链</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"> # ln <span class="token operator">-s <span class="token operator">/usr<span class="token operator">/local<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/bin<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/usr<span class="token operator">/bin<span class="token operator">/python3
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第6步:查询python版本</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"># python3 -V
Python 3.6.6
</code></pre>
</div>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"># python -V
Python 2.6.6
</code></pre>
</div>
<p>至此,python3安装完毕。</p>
<h2>3.2、安装pip3</h2>
<p>下面开始安装pip3的步骤。<br>第1步:安装setuptools</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-cpp"><code class="language-cpp"><span class="token punctuation"># wget <span class="token operator">--no<span class="token operator">-check<span class="token operator">-certificatehttps<span class="token operator">:<span class="token operator">/<span class="token operator">/pypi<span class="token punctuation">.python<span class="token punctuation">.org<span class="token operator">/packages<span class="token operator">/source<span class="token operator">/s<span class="token operator">/setuptools<span class="token operator">/setuptools<span class="token operator">-<span class="token number">19.6<span class="token punctuation">.tar<span class="token punctuation">.gz#md5<span class="token operator">=c607dd118eae682c44ed146367a17e26
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第2步:解压</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"># tar -zxvf setuptools-19.6.tar.gz
</code></pre>
</div>
<p>第3步:编译,安装</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"> # cd setuptools<span class="token operator">-<span class="token number">19.6<span class="token operator">/
<span class="token punctuation"> # python3 setup<span class="token punctuation">.py build
<span class="token punctuation"> # python3 setup<span class="token punctuation">.py install
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第4步:建立软链</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"> #ln <span class="token operator">-s <span class="token operator">/usr<span class="token operator">/local<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/bin<span class="token operator">/pip3 <span class="token operator">/usr<span class="token operator">/bin<span class="token operator">/pip3
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第5步:查看pip3版本</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"> # pip3 <span class="token operator">-<span class="token class-name">V
pip <span class="token number">8.0<span class="token number">.2 <span class="token keyword">from <span class="token operator">/usr<span class="token operator">/local<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/lib<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/site<span class="token operator">-packages<span class="token operator">/pip<span class="token operator">-<span class="token number">8.0<span class="token number">.2<span class="token operator">-py3<span class="token punctuation">.<span class="token number">6.egg <span class="token punctuation">(python <span class="token number">3.6<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>第6步:更新</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-ruby"><code class="language-ruby"><span class="token punctuation"> <span class="token comment"># pip3 install --upgrade pip
<span class="token constant">Collecting pip
<span class="token constant">Downloading https<span class="token punctuation">:<span class="token operator">/<span class="token operator">/files<span class="token punctuation">.pythonhosted<span class="token punctuation">.org<span class="token operator">/packages<span class="token operator">/<span class="token number">00<span class="token operator">/b6<span class="token operator">/<span class="token number">9cfa56b4081ad13874b0c6f96af8ce16cfbc1cb06bedf8e9164ce5551ec1<span class="token operator">/pip<span class="token operator">-<span class="token number">19.3<span class="token number">.1<span class="token operator">-py2<span class="token punctuation">.py3<span class="token operator">-none<span class="token operator">-any<span class="token punctuation">.whl <span class="token punctuation">(<span class="token number">1.4MB<span class="token punctuation">)
    <span class="token number">100<span class="token operator">% <span class="token operator">|████████████████████████████████<span class="token operator">| <span class="token number">1.4MB <span class="token number">172kB<span class="token operator">/s
<span class="token constant">Installing collected packages<span class="token punctuation">: pip
<span class="token constant">Found existing installation<span class="token punctuation">: pip <span class="token number">8.0<span class="token number">.2
    <span class="token constant">Uninstalling pip<span class="token operator">-<span class="token number">8.0<span class="token number">.2<span class="token punctuation">:
      <span class="token constant">Successfully uninstalled pip<span class="token operator">-<span class="token number">8.0<span class="token number">.2
<span class="token constant">Successfully installed pip<span class="token operator">-<span class="token number">19.3<span class="token number">.1
<span class="token punctuation"><span class="token comment"># pip3 -V
pip <span class="token number">19.3<span class="token number">.1 from <span class="token operator">/usr<span class="token operator">/local<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/lib<span class="token operator">/python3<span class="token punctuation">.<span class="token number">6<span class="token operator">/site<span class="token operator">-packages<span class="token operator">/pip <span class="token punctuation">(python <span class="token number">3.6<span class="token punctuation">)
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>至此,pip3安装完毕。</p>
<h2>3.3、启动服务</h2>
<p>启动服务分为前台启动和后台启动。</p>
<p>前台启动,就是应用直接由窗口运行,能在窗口直接打印出日志信息,如果手动 ctrl + C 打断时,应用停止。当使用前台启动时,如果我们退出终端,服务就会停止。<br>后台启动,就是用nohup等命令,执行应用,在窗口关闭后,或者 执行其他命令时,该应用仍然可以再后台运行。</p>
<p>使用前台启动python项目:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css"># python3 test.py
2020-01-02 16<span class="token punctuation">:00<span class="token punctuation">:47 <span class="token property">读取原日志信息:00<span class="token punctuation">:00<span class="token punctuation">:01.560 Bound request context to <span class="token property">thread<span class="token punctuation">: org.apache.catalina.connector.RequestFacade@2dc071e6 org.springframework.boot.web.filter.OrderedRequestContextFilter [<span class="token property">RID<span class="token punctuation">:] [<span class="token property">TID<span class="token punctuation">:] [<span class="token property">MID<span class="token punctuation">:]
2020-01-02 16<span class="token punctuation">:00<span class="token punctuation">:47 <span class="token property">转换格式前信息:00<span class="token punctuation">:00<span class="token punctuation">:01.560 Bound request context to <span class="token property">thread<span class="token punctuation">: org.apache.catalina.connector.RequestFacade@2dc071e6 org.springframework.boot.web.filter.OrderedRequestContextFilter [<span class="token property">RID<span class="token punctuation">:] [<span class="token property">TID<span class="token punctuation">:] [<span class="token property">MID<span class="token punctuation">:]
^CTraceback <span class="token punctuation">(most recent call last<span class="token punctuation">)<span class="token punctuation">:
File <span class="token string">"test.py"<span class="token punctuation">, line 174<span class="token punctuation">, in &lt;module&gt;
    read_<span class="token function">rawlog<span class="token punctuation">(<span class="token punctuation">)
File <span class="token string">"test.py"<span class="token punctuation">, line 79<span class="token punctuation">, in read_rawlog
    line_json = log_data_to_<span class="token function">json<span class="token punctuation">(line_temp<span class="token punctuation">)
File <span class="token string">"test.py"<span class="token punctuation">, line 120<span class="token punctuation">, in log_data_to_json
    logger = re.<span class="token function">findall<span class="token punctuation">(logger_rule<span class="token punctuation">, line<span class="token punctuation">)
File <span class="token string">"/usr/python3/lib/python3.6/re.py"<span class="token punctuation">, line 222<span class="token punctuation">, in findall
    return _<span class="token function">compile<span class="token punctuation">(pattern<span class="token punctuation">, flags<span class="token punctuation">).<span class="token function">findall<span class="token punctuation">(string<span class="token punctuation">)
KeyboardInterrupt
#
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<p>前台会输出正常的日志信息,直到你按下 ctrl + c 打断它,就会报KeyboardInterrupt。<br>下面演示后台启动python文件:</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"># nohup python3 test<span class="token punctuation">.py <span class="token operator">&amp;
</span></span></span></span></code></pre>
</div>
<p>简单介绍一下nohup 命令</p>
<p>用途:不挂断地运行命令。</p>
<p>语法:nohup Command [ Arg … ] [ &amp; ]</p>
<p>描述:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。nohup 执行 默认会自动生成一个 nohup.out 记录文件。</p>
<h2>3.4、停止服务</h2>
<p>前台启动的服务,直接 ctrl + c 停止服务,或者退出终端,服务就会停止。</p>
<p>后台启动的服务,用命令查看pid,然后 kill -9 pid 杀死任务。</p>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-csharp"><code class="language-csharp"><span class="token punctuation"># ps <span class="token operator">-ef<span class="token operator">|grep python
root      <span class="token number">9233<span class="token number">2598 <span class="token number">95 <span class="token number">16<span class="token punctuation">:<span class="token number">22 pts<span class="token operator">/<span class="token number">0    <span class="token number">00<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">16 python3 test<span class="token punctuation">.py
root      <span class="token number">9244<span class="token number">2598<span class="token number">0 <span class="token number">16<span class="token punctuation">:<span class="token number">22 pts<span class="token operator">/<span class="token number">0    <span class="token number">00<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">00 grep python
<span class="token punctuation"># kill <span class="token operator">-<span class="token number">9 <span class="token number">9233
<span class="token punctuation"># ps <span class="token operator">-ef<span class="token operator">|grep python
<span class="token punctuation"># ps <span class="token operator">-ef<span class="token operator">|grep python
root      <span class="token number">9257<span class="token number">2598<span class="token number">0 <span class="token number">16<span class="token punctuation">:<span class="token number">23 pts<span class="token operator">/<span class="token number">0    <span class="token number">00<span class="token punctuation">:<span class="token number">00<span class="token punctuation">:<span class="token number">00 grep python
<span class="token punctuation">[<span class="token number">1<span class="token punctuation">]<span class="token operator">+已杀死               nohup python3 test<span class="token punctuation">.py
</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
</div>
<h2>3.5、查看python执行的日志</h2>
<div class="_2Uzcx_"><button class="VJbwyy" type="button"></button>
<pre class="line-numberslanguage-css"><code class="language-css">查看前10行命令:
# head -n 10 nohup.out

查看后10行命令:
# tail -n 10 nohup.out

显示文件 nohup.log 的内容,从第 20 <span class="token property">行至文件末尾<span class="token punctuation">:
# tail +20 nohup.out

要跟踪名为 nohup.log 的文件的增长情况,请输入以下命令:
# tail -f nohup.out
</span></span></code></pre>
</div>
<p>tail -f filename 会把 filename 文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要 filename 更新就可以看到最新的文件内容。</p>
<p>命令格式:<br>tail [参数] [文件]<br>参数:</p>
<p>-f 循环读取<br>-q 不显示处理信息<br>-v 显示详细的处理信息<br>-c&lt;数目&gt; 显示的字节数<br>-n&lt;行数&gt; 显示文件的尾部 n 行内容<br>--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束<br>-q, --quiet, --silent 从不输出给出文件名的首部<br>-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒</p>

</div>
<div id="MySignature" role="contentinfo">
    <p>本文来自博客园,作者:大码王,转载请注明原文链接:https://www.cnblogs.com/huanghanyu/</p><br><br>
来源:https://www.cnblogs.com/huanghanyu/p/12921842.html
頁: [1]
查看完整版本: python之(6)如何把python项目部署到linux服务器上