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)