Python服务器/本地离线部署

Python环境安装

CentOS 7.4 默认⾃带了⼀个 Python2.7 环境:

然⽽现在主流都是 Python3 ,所以接下来再装⼀个 Python3 ,打造⼀个共存的环境。

Python安装包下载地址:https://www.python.org/downloads/source/

1、准备Python3安装包并解压

我这李下载的是 Python-3.8.3.tgz 安装包,并将其直接放在了/root 目录下

执行如下命令解压:

tar zxvf Python-3.8.3.tgz

则可以在当前目录得到文件夹:Python-3.8.3

2、安装相关预备环境

直接执⾏如下命令即可:

dnf install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel libffi-devel gcc make

3、编译并安装

这里指定了安装目录为 /usr/local/python3,有需要可以自定义

cd Python-3.8.3/
./configure prefix=/usr/local/python3
make && make install

等安装过程完毕, /usr/local/python3 ⽬录就会⽣成了

4、添加软链接

我们还需要将刚刚安装生成的目录 /usr/local/python3 里的python3可执行文件做一份软链接,链接到 /usr/bin下,方便后续使用python3

# 删除已存在的目标文件
rm /usr/bin/python3
rm /usr/bin/pip3
# 创建符号链接
ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3.7
ln -s /usr/local/python3/bin/pip3.7 /usr/bin/pip3.7

5、验证安装

命令⾏输⼊ python3 ,即可查看 Python3 版本的安装结果

⽽输⼊ python ,依然还是 python2.7.5 环境

python3 --version	# 查看python版本
pip3 --version		# 查看pip版本

服务器部署

Linux

python3.7 -m pip install virtualenv		# 下载virtualenv工具
python3.7 -m virtualenv venv			# 创建虚拟环境
source venv/bin/activate		# 激活虚拟环境
deactivate						# 退出虚拟环境
pip install -r requirements.txt	# 下载依赖包
pip install --no-cache-dir -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt	# 下载依赖包

Windows

pip install virtualenv			# 下载virtualenv工具
python -m virtualenv venv		# 创建虚拟环境
venv\Scripts\					# 激活虚拟环境
activate						# 激活虚拟环境
cd ../..						# 切换到根目录
pip install xxx					# 下载第三方依赖
python3 -m pip install xxxx		# 下载第三方依赖(指定python3解释器)
pip freeze > requirements.txt	# 导出依赖文件
pip install -r requirements.txt	# 下载依赖包

切换国内镜像

打开该文件夹C:\Users\zndx\AppData\Roaming
在Roaming文件夹下新建文件夹pip,然后在此文件夹下新建pip.ini文件,并在其中输入以下内容:

[global]
timeout = 60000
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
use-mirrors = true
mirrors = https://pypi.tuna.tsinghua.edu.cn

pip.ini文件中的链接地址还可以更换其他的如下:
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

后台运行python


进入要运行的py文件目录前

nohup python -u test.py > test.log 2>&1 &

含义解释:
nohup 不挂起的意思
python test.py python运行test.py文件

-u 代表程序不启用缓存,也就是把输出直接放到log中,没这个参数的话,log文件的生成会有延迟

test.log 将输出日志保存到这个log中

2>1 2与>结合代表错误重定向,而1则代表错误重定向到一个文件1,而不代表标准输出;
2>&1 换成2>&1,&与1结合就代表标准输出了,就变成错误重定向到标准输出.

& 最后一个& ,代表该命令在后台执行

本地离线

# 导出第三方模块
pip freeze > requirements.txt
# 离线下载packages文件夹
pip download -d packages -r requirements.txt
# packages文件夹和requirement.txt放在D:\Python\Scripts下
# 进入D:\Python\Scripts执行命令
pip install --no-index --find-links=packages -r requirements.txt 

Python打成exe文件

# 下载pyinstaller
pip install pyinstaller
# 打成exe文件
pyinstaller -F -w -i xxx.ico app.py

pyinstaller 打包出现第三方库FileNotFoundError的报错

FileNotFoundError: [Errno 2] No such file or directory: ‘C:\Users\ADMINI~1\AppData\Local\Temp\1\_MEI54762\jieba\dict.txt’
[20784] Failed to execute script bat_server

上面就是没把python库jieba的dict.txt打包进来,导致了错误。

那么,解决问题也很简单,自己写个hook,然后放进python根目录\Lib\site-packages\PyInstaller\hooks下即可。

hook文件的命名规范为: hook-【库名】.py,以结巴分词为例,即为hook-jieba.py,然后简单敲入以下两行:

from PyInstaller.utils.hooks import collect_data_files
 
datas = collect_data_files("jieba")

Java传递Json数据到python

public static String sendPostRequest(String url, JSONObject jsonData) {
        try {
            // 创建HTTP连接
            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();
            // 设置请求方法为POST
            con.setRequestMethod("POST");
            // 设置请求头部为'application/json'
            con.setRequestProperty("Content-Type", "application/json");
            // 启用输入输出流
            con.setDoOutput(true);
            // 将JSON数据写入请求主体
            try (OutputStream os = con.getOutputStream()) {
                byte[] input = jsonData.toString().getBytes("utf-8");
                os.write(input, 0, input.length);
            }
            // 获取HTTP响应代码
            int responseCode = con.getResponseCode();

            // 处理响应数据
            if (responseCode == HttpURLConnection.HTTP_OK) {
                // 读取响应数据
                try (BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()))) {
                    String inputLine;
                    StringBuilder response = new StringBuilder();
                    while ((inputLine = in.readLine()) != null) {
                        response.append(inputLine);
                    }
                    // 返回响应内容
                    return response.toString();
                }
            } else {
                // 处理HTTP错误响应
                System.err.println("HTTP请求失败,响应代码: " + responseCode);
            }

            con.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
# coding:utf-8
from flask import Flask, request, jsonify

ev = Flask('/flask', static_folder="templates")
ev.config['JSON_AS_ASCII'] = False

@ev.route("/ev", methods=['GET', 'POST'])
def find_road():
    try:
        # 获取POST请求中的JSON数据
        json_data = request.get_json()
        # 解析JSON数据
        demandNum = json_data.get("demandNum")
        print(demandNum)
        storageNum = json_data.get("storageNum")
        print(storageNum)
        materialTypeNum = json_data.get("materialTypeNum")
        print(materialTypeNum)
        transNum = json_data.get("transNum")
        print(transNum)

        # 在这里处理接收到的数据
        # 例如,可以执行某些操作并返回响应
        # 返回JSON响应
        response_data = {
            "message": "数据接收成功",
            "demandNum": demandNum,
            "storageNum": storageNum,
            "materialTypeNum": materialTypeNum,
            "transNum": transNum
        }
        return jsonify(response_data), 200
    except Exception as e:
        print(e)
        return jsonify({"error": "数据解析错误"}), 400


if __name__ == '__main__':
    ev.run(host='localhost', port=8999, debug=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值