​Ubuntu20安装搜狗输入法 (自带的智能拼音太烂了)

Linux李魔佛 发表了文章 • 0 个评论 • 1783 次浏览 • 2022-05-20 13:49 • 来自相关话题

效果图:





 
 Ubuntu20.04安装搜狗输入法步骤

1、更新源

在终端执行 sudo apt update


2、安装fcitx输入法框架

\1. 在终端输入 sudo apt install fcitx


\2. 设置fcitx为系统输入法


点击左下角菜单选择语言支持,将语言选择为fcitx(如下图二)



\3. 设置fcitx开机自启动

在终端执行sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/



\4. 卸载系统ibus输入法框架

在终端执行 sudo apt purge ibus



3、安装搜狗输入法

\1. 在官网下载搜狗输入法安装包,并安装,安装命令 sudo dpkg -i 安装包名



\2. 安装输入法依赖

在终端执行

sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2

sudo apt install libgsettings-qt1



4、重启电脑、调出输入法

1.重启电脑

2.查看右上角,可以看到“搜狗”字样,在输入窗口即可且出搜狗输入法。



\3. 没有“搜狗”字样,选择配置,将搜狗加入输入法列表即可



至此,搜狗输入法安装完毕 查看全部
效果图:

20220520_003.png

 
 Ubuntu20.04安装搜狗输入法步骤

1、更新源

在终端执行 sudo apt update


2、安装fcitx输入法框架

\1. 在终端输入 sudo apt install fcitx


\2. 设置fcitx为系统输入法


点击左下角菜单选择语言支持,将语言选择为fcitx(如下图二)



\3. 设置fcitx开机自启动

在终端执行sudo cp /usr/share/applications/fcitx.desktop /etc/xdg/autostart/



\4. 卸载系统ibus输入法框架

在终端执行 sudo apt purge ibus



3、安装搜狗输入法

\1. 在官网下载搜狗输入法安装包,并安装,安装命令 sudo dpkg -i 安装包名



\2. 安装输入法依赖

在终端执行

sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 qml-module-qtquick2

sudo apt install libgsettings-qt1



4、重启电脑、调出输入法

1.重启电脑

2.查看右上角,可以看到“搜狗”字样,在输入窗口即可且出搜狗输入法。



\3. 没有“搜狗”字样,选择配置,将搜狗加入输入法列表即可



至此,搜狗输入法安装完毕

国金证券可转债费率 最低是多少?

券商万一免五绫波丽 发表了文章 • 0 个评论 • 2036 次浏览 • 2022-05-20 11:20 • 来自相关话题

 目前笔者这里的营业部的国金证券的可转债(新规)费率是 沪十万分之4.1,深市 十万分之4。

也就是你 单笔买入沪市可转债 10万,就收4.1块钱,如果买入5千元,就收2毛0.5分钱。 非常低,适合日内做T
 
除此之外,不会加收其他费用,买卖都是一样,不象股票那样,除非给券商交易佣金,还要给交易所印花税,过户费,股民就像个过街肥羊一样,谁都想要来咬一口。
 
一般沪市转债的代码是11开头的,深市转债的代码是12开头的。
 
目前本营业部的股票费率是万1,比你自己在官方app开通要便宜得多。因为我们会帮你们调佣。
 
需要开通国金证券的,可以扫描下面微信二维码: 查看全部
a55dd1c2666bee13c25355f8f18baa5d.jpeg

 目前笔者这里的营业部的国金证券的可转债(新规)费率是 沪十万分之4.1,深市 十万分之4

也就是你 单笔买入沪市可转债 10万,就收4.1块钱,如果买入5千元,就收2毛0.5分钱。 非常低,适合日内做T
 
除此之外,不会加收其他费用,买卖都是一样,不象股票那样,除非给券商交易佣金,还要给交易所印花税,过户费,股民就像个过街肥羊一样,谁都想要来咬一口。
 
一般沪市转债的代码是11开头的,深市转债的代码是12开头的。
 
目前本营业部的股票费率是万1,比你自己在官方app开通要便宜得多。因为我们会帮你们调佣。
 
需要开通国金证券的,可以扫描下面微信二维码:

shell批量导入mysql数据库 附代码

Linux李魔佛 发表了文章 • 0 个评论 • 1305 次浏览 • 2022-05-19 17:52 • 来自相关话题

把目录下的sql脚本名字复制到

restore_db=(db_bond_daily.sql db_bond_history.sql)
 
里面,比如这里的 db_bond_daily.sql db_bond_history.sql 
#!/bin/bash

# 批量备份数据库
MYSQL_USER=root
MYSQL_PASSWORD=123456 # 改为你的mysql密码
HOST=127.0.0.1
restore_db=(db_bond_daily.sql db_bond_history.sql) # sql 文件列表

for i in ${restore_db[*]}
do
name=(${i//./ }) # 切割名字

mysql -h$HOST -u$MYSQL_USER -p$MYSQL_PASSWORD ${name[0]}<${i}

done
  查看全部
把目录下的sql脚本名字复制到

restore_db=(db_bond_daily.sql db_bond_history.sql)
 
里面,比如这里的 db_bond_daily.sql db_bond_history.sql 
#!/bin/bash

# 批量备份数据库
MYSQL_USER=root
MYSQL_PASSWORD=123456 # 改为你的mysql密码
HOST=127.0.0.1
restore_db=(db_bond_daily.sql db_bond_history.sql) # sql 文件列表

for i in ${restore_db[*]}
do
name=(${i//./ }) # 切割名字

mysql -h$HOST -u$MYSQL_USER -p$MYSQL_PASSWORD ${name[0]}<${i}

done

 

腾讯云轻量服务器使用mysqldump导出数据 导致进程被杀

数据库李魔佛 发表了文章 • 0 个评论 • 1211 次浏览 • 2022-05-18 19:43 • 来自相关话题

只能说任何数据库都不能随意放在轻量服务器,io读写太差了。
 
稍微密集一点,直接被杀掉。
 
在方面放mysql服务,简直就是煞笔行为。
只能说任何数据库都不能随意放在轻量服务器,io读写太差了。
 
稍微密集一点,直接被杀掉。
 
在方面放mysql服务,简直就是煞笔行为。

centos yum安装mysql client 客户端

数据库马化云 发表了文章 • 0 个评论 • 2156 次浏览 • 2022-05-17 11:51 • 来自相关话题

centos7 下使用yum下找不到mysql客户端的rpm包了,
 
这时需要从官网下载

1.安装rpm源

rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm

 
2.安装客户端

#可以通过yum搜索yum search mysql

#若是64位的话直接安装yum install mysql-community-client.x86_64
 结果报错
报以下密钥错误:The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

则先执行以下命令再安装:rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
wget -q -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022|yum install然后重新安装 yum install mysql-community-client.x86_64

 
操作:
连到数据库:mysql -h 数据库地址 -u数据库用户名 -p数据库密码 -D 数据库名称

mysql -h 88.88.19.252 -utravelplat -pHdkj1234 -D etravel

数据库导出(表结构):mysqldump -h 数据库地址 -u数据库用户名 -p数据库密码 -d 数据库名称 > 文件名.sql
mysqldump -h 88.88.19.252 -utravelplat -pHdkj1234 -d etravel > db20190713.sql

数据库导出(表结构 + 表数据):mysqldump -h 数据库地址 -u数据库用户名 -p数据库密码 数据库名称 > 文件名.sql
mysqldump -h 88.88.19.252 -utravelplat -pHdkj1234 etravel > db20190713.sql

数据库表导出(表结构 + 表数据):
mysqldump -h 88.88.19.252 -utravelplat -pHdkj1234 etravel doc > doc.sql

导入到数据库:source 文件名.sql
source db20190713.sql
 
  查看全部
centos7 下使用yum下找不到mysql客户端的rpm包了,
 
这时需要从官网下载

1.安装rpm源

rpm -ivh https://repo.mysql.com//mysql57-community-release-el7-11.noarch.rpm

 
2.安装客户端

#可以通过yum搜索
yum search mysql


#若是64位的话直接安装
yum install mysql-community-client.x86_64

 结果报错
报以下密钥错误:
The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.


则先执行以下命令再安装:
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
wget -q -O - https://repo.mysql.com/RPM-GPG-KEY-mysql-2022|yum install
然后重新安装 yum install mysql-community-client.x86_64

 
操作:
连到数据库:mysql -h 数据库地址 -u数据库用户名 -p数据库密码 -D 数据库名称

mysql -h 88.88.19.252 -utravelplat -pHdkj1234 -D etravel

数据库导出(表结构):mysqldump -h 数据库地址 -u数据库用户名 -p数据库密码 -d 数据库名称 > 文件名.sql
mysqldump -h 88.88.19.252 -utravelplat -pHdkj1234 -d etravel > db20190713.sql

数据库导出(表结构 + 表数据):mysqldump -h 数据库地址 -u数据库用户名 -p数据库密码 数据库名称 > 文件名.sql
mysqldump -h 88.88.19.252 -utravelplat -pHdkj1234 etravel > db20190713.sql

数据库表导出(表结构 + 表数据):
mysqldump -h 88.88.19.252 -utravelplat -pHdkj1234 etravel doc > doc.sql

导入到数据库:source 文件名.sql
source db20190713.sql
 
 

ubuntu20 设置程序/脚本开机自动启动 可视化

Linux马化云 发表了文章 • 0 个评论 • 2660 次浏览 • 2022-05-16 16:40 • 来自相关话题

不少新手不会设置ubuntu20下程序自动启动。 网上大部分文章是使用命令行操作。
无非都是把脚本写入到/etc/rc.local 里面
 
不过笔者在ubuntu20下,试了他们的方法,发现都没有生效,所以就比较郁闷了。
 
不过也找到了一种图形界面的方法,亲测也可以使用。
 
1. 在终端下输入 
sudo gnome-session-properties
2. 在弹出来的图形界面中,会让你输入自动启动的命令路径和名字。
 
这个时候,点击add,然后只需要把你的程序路径填入 command 的地址中,然后随意写一个名字(有意义即可)
 

 
  查看全部
不少新手不会设置ubuntu20下程序自动启动。 网上大部分文章是使用命令行操作。
无非都是把脚本写入到/etc/rc.local 里面
 
不过笔者在ubuntu20下,试了他们的方法,发现都没有生效,所以就比较郁闷了。
 
不过也找到了一种图形界面的方法,亲测也可以使用。
 
1. 在终端下输入 
sudo gnome-session-properties

2. 在弹出来的图形界面中,会让你输入自动启动的命令路径和名字。
 
这个时候,点击add,然后只需要把你的程序路径填入 command 的地址中,然后随意写一个名字(有意义即可)
 

 
 

typora markdown 调整表格宽度

闲聊马化云 发表了文章 • 0 个评论 • 4422 次浏览 • 2022-05-15 23:39 • 来自相关话题

原生的markdown语言只能控制居中,靠左,靠右这种比较常规的操作。
如果要控制具体的宽度,需要用html的语言控制:<span style="display:inline-block;width: 80px"> 列名 </span> 
上面的语句控制表格宽度为80像素。 改动数字80 ,可以设置为你;需要的任意宽度。
  查看全部
原生的markdown语言只能控制居中,靠左,靠右这种比较常规的操作。
如果要控制具体的宽度,需要用html的语言控制:
<span style="display:inline-block;width: 80px"> 列名 </span>
 
上面的语句控制表格宽度为80像素。 改动数字80 ,可以设置为你;需要的任意宽度。
 

为什么市面上大部分银河证券不免五了? 还有哪些营业部可以免五

券商万一免五绫波丽 发表了文章 • 0 个评论 • 3004 次浏览 • 2022-05-12 18:52 • 来自相关话题

 在2年前,免五的银河遍地都是。 而后面因为其他大券商不免五,纷纷向zjh投诉,施压。 后面银河的免五就逐渐被限制。
 
目前能够无条件开除免五的营业部已经不多了。
 
当然如果你满足一定资金量的话,个别营业部还是可以开出万一免五的低佣费率。
 

 
资金门槛在1w-50w不等。
 
需要的朋友可以扫码联系:

备注:开户
非诚勿扰。
 
也欢迎同行合作~ 查看全部
 在2年前,免五的银河遍地都是。 而后面因为其他大券商不免五,纷纷向zjh投诉,施压。 后面银河的免五就逐渐被限制。
 
目前能够无条件开除免五的营业部已经不多了。
 
当然如果你满足一定资金量的话,个别营业部还是可以开出万一免五的低佣费率。
 

 
资金门槛在1w-50w不等。
 
需要的朋友可以扫码联系:

备注:开户
非诚勿扰。
 
也欢迎同行合作~

ubuntu的Shotwell 图片处理,居然连图片大小调整的功能都没有

Linux李魔佛 发表了文章 • 0 个评论 • 1271 次浏览 • 2022-05-11 17:31 • 来自相关话题

有点无语,平时用得最多的功能,居然没有。
 


只好用用中的photogimg(号称ubuntu下的photoshop)
有点无语,平时用得最多的功能,居然没有。
 


只好用用中的photogimg(号称ubuntu下的photoshop)

禁止google浏览器http链接强制跳转为https ->网上的根本都是无效的方法

网络李魔佛 发表了文章 • 0 个评论 • 1622 次浏览 • 2022-05-11 17:11 • 来自相关话题

在Chrome浏览器地址栏中输入chrome://net-internals/,打开HSTS标签,在Add domain里的Domain输入要添加的域名地址(不带http的地址),点Add即可。  其中Include subdomains选项还可以添加子域名,保证所有子域名都使用HTTPS访问。
 

一般在网上的都是按照上面的方法操作,不过实际弄下来,发现根本无法组织chrome自动调转的https。
 
主要这个网站的主域名是https的,而他的二级域名是http的,用http的二级域名访问是,总是调转到https的页面(首页)。
 
最后无奈,只好用firefox来浏览这个http的页面。
郁闷ing。。 查看全部


在Chrome浏览器地址栏中输入chrome://net-internals/,打开HSTS标签,在Add domain里的Domain输入要添加的域名地址(不带http的地址),点Add即可。  其中Include subdomains选项还可以添加子域名,保证所有子域名都使用HTTPS访问。
 


一般在网上的都是按照上面的方法操作,不过实际弄下来,发现根本无法组织chrome自动调转的https。
 
主要这个网站的主域名是https的,而他的二级域名是http的,用http的二级域名访问是,总是调转到https的页面(首页)。
 
最后无奈,只好用firefox来浏览这个http的页面。
郁闷ing。。

docker访问外部主机的ip

Linux马化云 发表了文章 • 0 个评论 • 2521 次浏览 • 2022-05-10 01:48 • 来自相关话题

假如在linux里面安装了一个docker,然后linux做了一个http接口,端口为80.
 
那么假如我部署了一个nginx容器在docker里面,那么我的nginx要如何反向代理到我的linux主机的80端口呢?
 
那么我们测试一下,加入nginx容器的名字为ng110,那么我们通过命令docker exec -it ng110 /bin/bash
进入容器内部。
 
然后我们尝试curl获取主机的80端口。
 
首先,curl http://127.0.0.1/
 
这样子是不通的,因为127.0.0.1是docker内部的回环地址。并不是外部linux的ip。
 
那么我们先在linux外部,运行命令:ifconfig

 
这里有一个docker的的字样的ip地址。 那么这个地址就是在docker看来的外部ip地址。
 
然后我们继续回到docker容器里面,curl http://172.17.0.1/
结果我们发现有返回数据了。
 
所以在外面的ifconfig的docker容器地址,就是主机相对容器的ip地址。
 
所以我的nginx配置文件应该这么写:
 

 
proxy_pass http://172.17.0.1:80 查看全部
假如在linux里面安装了一个docker,然后linux做了一个http接口,端口为80.
 
那么假如我部署了一个nginx容器在docker里面,那么我的nginx要如何反向代理到我的linux主机的80端口呢?
 
那么我们测试一下,加入nginx容器的名字为ng110,那么我们通过命令docker exec -it ng110 /bin/bash
进入容器内部。
 
然后我们尝试curl获取主机的80端口。
 
首先,curl http://127.0.0.1/
 
这样子是不通的,因为127.0.0.1是docker内部的回环地址。并不是外部linux的ip。
 
那么我们先在linux外部,运行命令:ifconfig

 
这里有一个docker的的字样的ip地址。 那么这个地址就是在docker看来的外部ip地址。
 
然后我们继续回到docker容器里面,curl http://172.17.0.1/
结果我们发现有返回数据了。
 
所以在外面的ifconfig的docker容器地址,就是主机相对容器的ip地址。
 
所以我的nginx配置文件应该这么写:
 

 
proxy_pass http://172.17.0.1:80

集思录这个站点的技术人员挺菜的,连cdn都不用

网络李魔佛 发表了文章 • 0 个评论 • 1039 次浏览 • 2022-05-09 23:21 • 来自相关话题

 
用稍微大点的ddos攻击下,就容易瘫痪大了的。。。。。。。
心真大。

 
用稍微大点的ddos攻击下,就容易瘫痪大了的。。。。。。。
心真大。

csdn自定义域名居然都要收费,而且......

闲聊李魔佛 发表了文章 • 0 个评论 • 1136 次浏览 • 2022-05-09 12:02 • 来自相关话题

而且还不便宜呀
正规买个域名都没这么贵的。
只是个csdn自定义的二级域名,人家其他新浪微博啥的都任你改名字。。。

 
而且还不便宜呀
正规买个域名都没这么贵的。
只是个csdn自定义的二级域名,人家其他新浪微博啥的都任你改名字。。。

 

有道云笔记7.0版本太卡了

闲聊李魔佛 发表了文章 • 0 个评论 • 2036 次浏览 • 2022-05-09 00:30 • 来自相关话题

 
只要打开有道云笔记,立马超越chrome成为内存大户。
 
笔记本cpu风扇瞬间转起来。
 

 
只要打开有道云笔记,立马超越chrome成为内存大户。
 
笔记本cpu风扇瞬间转起来。
 

python对视频添加水印 调整帧率

python李魔佛 发表了文章 • 0 个评论 • 1267 次浏览 • 2022-05-07 11:37 • 来自相关话题

Python调用ffmpeg开源视频处理库,来实现视频批量的处理:水印、背景音乐、剪辑、合并、帧率、速率、分辨率等操作

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。 它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。 这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。 许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。 项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
 
 # coding=utf-8
import os
import subprocess
import datetime
import json, pprint
import re, time
import threading
import random
import shutil


class FFmpeg:

def __init__(self, editvdo, addlogo=None, addmusic=None,
addvdohead=None, addvdotail=None):
self.editvdo = editvdo
self.addlogo = addlogo
self.addmusic = addmusic
self.addvdohead = addvdohead
self.addvdotail = addvdotail
self.vdo_time, self.vdo_width, self.vdo_height, self.attr_dict = self.get_attr()
self.editvdo_path = os.path.dirname(editvdo)
self.editvdo_name = os.path.basename(editvdo)

def get_attr(self):
"""
获取视频属性参数
:return:
"""
strcmd = r'ffprobe -print_format json -show_streams -i "{}"'.format(self.editvdo)
status, output = subprocess.getstatusoutput(strcmd)
agrs = eval(re.search('{.*}', output, re.S).group().replace("\n", "").replace(" ", ''))
streams = agrs.get('streams', )
agrs_dict = dict()
[agrs_dict.update(x) for x in streams]
vdo_time = agrs_dict.get('duration')
vdo_width = agrs_dict.get('width')
vdo_height = agrs_dict.get('height')
attr = (vdo_time, vdo_width, vdo_height, agrs_dict)
return attr

def edit_head(self, start_time, end_time, deposit=None):
"""
截取指定长度视频
:param second: 去除开始的多少秒
:param deposit: 另存为文件
:return: True/Flase
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_head'+self.editvdo_name
start = time.strftime('%H:%M:%S', time.gmtime(start_time))
end = time.strftime('%H:%M:%S', time.gmtime(end_time))
strcmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -ss {} -to {} "{}" -y'.format(
self.editvdo, start, end, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_logo(self, deposit=None):
"""
添加水印
:param deposit:添加水印后另存为路径,为空则覆盖
:return: True/False
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_logo'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -vf "movie=\'{}\' [watermark];[in] ' \
r'[watermark] overlay=main_w-overlay_w-10:10 [out]" "{}"'.format(
self.editvdo, self.addlogo, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_music(self, deposit=None):
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_music'+self.editvdo_name
strcmd = r'ffmpeg -y -i "{}" -i "{}" -filter_complex "[0:a] ' \
r'pan=stereo|c0=1*c0|c1=1*c1 [a1], [1:a] ' \
r'pan=stereo|c0=1*c0|c1=1*c1 [a2],[a1][a2]amix=duration=first,' \
r'pan=stereo|c0<c0+c1|c1<c2+c3,pan=mono|c0=c0+c1[a]" ' \
r'-map "[a]" -map 0:v -c:v libx264 -c:a aac ' \
r'-strict -2 -ac 2 "{}"'.format(self.editvdo, self.addmusic, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_rate(self, rete=30, deposit=None):
"""
改变帧率
:param rete: 修改大小帧率
:param deposit: 修改后保存路径
:return:
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_music'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -r {} "{}"' % (self.editvdo, rete, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_power(self, power='1280x720', deposit=None):
"""
修改分辨率
:param power: 分辨率
:param deposit: 修改后保存路径,为空则覆盖
:return:
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_power'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -s {} "{}"'.format(self.editvdo, power, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def rdit_marge(self, vdo_head, vdo_tail, deposit=None):
if None == deposit:
deposit = self.editvdo_path+'/'+'rdit_marge'+self.editvdo_name
with open(self.editvdo_path+'/'+'rdit_marge.txt', 'w', encoding='utf-8') as f:
f.write("file '{}' \nfile '{}' \nfile '{}'" .format(
vdo_head, self.editvdo, vdo_tail))
strcmd = r'ffmpeg -f concat -safe 0 -i "{}" -c copy "{}"'.format(
self.editvdo_path + '/' + 'rdit_marge.txt', deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False



# ffmpeg - i input.mkv - filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" - map"[v]" - map"[a]" output.mkv



test = FFmpeg(r"D:\vdio\4.mp4")


PS:需要电脑把ffmpeg的可执行文件放到环境变量中 查看全部
Python调用ffmpeg开源视频处理库,来实现视频批量的处理:水印、背景音乐、剪辑、合并、帧率、速率、分辨率等操作

FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。 它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。 FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。 这个项目最早由Fabrice Bellard发起,2004年至2015年间由Michael Niedermayer主要负责维护。 许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。 项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"。
 
 
# coding=utf-8
import os
import subprocess
import datetime
import json, pprint
import re, time
import threading
import random
import shutil


class FFmpeg:

def __init__(self, editvdo, addlogo=None, addmusic=None,
addvdohead=None, addvdotail=None):
self.editvdo = editvdo
self.addlogo = addlogo
self.addmusic = addmusic
self.addvdohead = addvdohead
self.addvdotail = addvdotail
self.vdo_time, self.vdo_width, self.vdo_height, self.attr_dict = self.get_attr()
self.editvdo_path = os.path.dirname(editvdo)
self.editvdo_name = os.path.basename(editvdo)

def get_attr(self):
"""
获取视频属性参数
:return:
"""
strcmd = r'ffprobe -print_format json -show_streams -i "{}"'.format(self.editvdo)
status, output = subprocess.getstatusoutput(strcmd)
agrs = eval(re.search('{.*}', output, re.S).group().replace("\n", "").replace(" ", ''))
streams = agrs.get('streams', )
agrs_dict = dict()
[agrs_dict.update(x) for x in streams]
vdo_time = agrs_dict.get('duration')
vdo_width = agrs_dict.get('width')
vdo_height = agrs_dict.get('height')
attr = (vdo_time, vdo_width, vdo_height, agrs_dict)
return attr

def edit_head(self, start_time, end_time, deposit=None):
"""
截取指定长度视频
:param second: 去除开始的多少秒
:param deposit: 另存为文件
:return: True/Flase
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_head'+self.editvdo_name
start = time.strftime('%H:%M:%S', time.gmtime(start_time))
end = time.strftime('%H:%M:%S', time.gmtime(end_time))
strcmd = 'ffmpeg -i "{}" -vcodec copy -acodec copy -ss {} -to {} "{}" -y'.format(
self.editvdo, start, end, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_logo(self, deposit=None):
"""
添加水印
:param deposit:添加水印后另存为路径,为空则覆盖
:return: True/False
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_logo'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -vf "movie=\'{}\' [watermark];[in] ' \
r'[watermark] overlay=main_w-overlay_w-10:10 [out]" "{}"'.format(
self.editvdo, self.addlogo, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_music(self, deposit=None):
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_music'+self.editvdo_name
strcmd = r'ffmpeg -y -i "{}" -i "{}" -filter_complex "[0:a] ' \
r'pan=stereo|c0=1*c0|c1=1*c1 [a1], [1:a] ' \
r'pan=stereo|c0=1*c0|c1=1*c1 [a2],[a1][a2]amix=duration=first,' \
r'pan=stereo|c0<c0+c1|c1<c2+c3,pan=mono|c0=c0+c1[a]" ' \
r'-map "[a]" -map 0:v -c:v libx264 -c:a aac ' \
r'-strict -2 -ac 2 "{}"'.format(self.editvdo, self.addmusic, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_rate(self, rete=30, deposit=None):
"""
改变帧率
:param rete: 修改大小帧率
:param deposit: 修改后保存路径
:return:
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_music'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -r {} "{}"' % (self.editvdo, rete, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def edit_power(self, power='1280x720', deposit=None):
"""
修改分辨率
:param power: 分辨率
:param deposit: 修改后保存路径,为空则覆盖
:return:
"""
if None == deposit:
deposit = self.editvdo_path+'/'+'edit_power'+self.editvdo_name
strcmd = r'ffmpeg -i "{}" -s {} "{}"'.format(self.editvdo, power, deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False

def rdit_marge(self, vdo_head, vdo_tail, deposit=None):
if None == deposit:
deposit = self.editvdo_path+'/'+'rdit_marge'+self.editvdo_name
with open(self.editvdo_path+'/'+'rdit_marge.txt', 'w', encoding='utf-8') as f:
f.write("file '{}' \nfile '{}' \nfile '{}'" .format(
vdo_head, self.editvdo, vdo_tail))
strcmd = r'ffmpeg -f concat -safe 0 -i "{}" -c copy "{}"'.format(
self.editvdo_path + '/' + 'rdit_marge.txt', deposit)
result = subprocess.run(args=strcmd, stdout=subprocess.PIPE, shell=True)
if os.path.exists(deposit):
os.remove(self.editvdo)
os.rename(deposit, self.editvdo)
return True
else:
return False



# ffmpeg - i input.mkv - filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" - map"[v]" - map"[a]" output.mkv



test = FFmpeg(r"D:\vdio\4.mp4")


PS:需要电脑把ffmpeg的可执行文件放到环境变量中

格式工厂去除视频水印logo效果不好

python李魔佛 发表了文章 • 0 个评论 • 1650 次浏览 • 2022-05-07 10:53 • 来自相关话题

本来想用opencv处理的,发现格式工厂已经有类似的功能了。
 
试了一下,结果效果不理想,格式工厂只是把logo区域进行模糊处理,也就是logo区域变得不可再阅读。
 

 
  查看全部
本来想用opencv处理的,发现格式工厂已经有类似的功能了。
 
试了一下,结果效果不理想,格式工厂只是把logo区域进行模糊处理,也就是logo区域变得不可再阅读。
 

 
 

wp super cache缓存文件在哪里?

网络李魔佛 发表了文章 • 0 个评论 • 1436 次浏览 • 2022-05-07 01:01 • 来自相关话题

wordpress_cn/wp-content/cache/supercache/xxxx.com (最后一个为你的域名)
 
里面的静态文件是html后缀结尾的。
 

 
如果同时开启了cdn加速,和wp super cache, 那么会有个问题。 你写的文章,发布出去后,无论怎么刷新都出不了的。
 
为什么?
 
因为你的首页也是做了wp super cache 变成了静态页面,以html结尾的。
 
而html文件默认是被cdn缓存起来的。
 
也就是用户访问你的网站的时候, 看到的是cdn里面的index.html, 而这个文件是有wp super cache生成的,而你的缓存规则如果是所有文件缓存7天的话,意味着你7天后才可以看到你新发的文章。
 
当然解决办法也很简单,在缓存规则里面,把html后缀设置为不缓存就可以了。 查看全部
wordpress_cn/wp-content/cache/supercache/xxxx.com (最后一个为你的域名)
 
里面的静态文件是html后缀结尾的。
 

 
如果同时开启了cdn加速,和wp super cache, 那么会有个问题。 你写的文章,发布出去后,无论怎么刷新都出不了的。
 
为什么?
 
因为你的首页也是做了wp super cache 变成了静态页面,以html结尾的。
 
而html文件默认是被cdn缓存起来的。
 
也就是用户访问你的网站的时候, 看到的是cdn里面的index.html, 而这个文件是有wp super cache生成的,而你的缓存规则如果是所有文件缓存7天的话,意味着你7天后才可以看到你新发的文章。
 
当然解决办法也很简单,在缓存规则里面,把html后缀设置为不缓存就可以了。

typora 复制公众号文章时图片无法正确上传到图床

闲聊李魔佛 发表了文章 • 0 个评论 • 1532 次浏览 • 2022-05-07 00:54 • 来自相关话题

正常使用typora的时候,复制网页的内容,可以直接把远程的图片也顺带抓下来,同时上传到诸如七牛,腾讯cos的服务器。
 
可是对于微信公众号的文章,typora复制出来的图片都是一样的。主要原因是公众号的图片命名都叫640.png。
 
以至于上传的图片都是同一张。
 
那么如何解决这个问题呢?
 
我们可以绕道。
 
先用有道云笔记保存公众号的文章。
 
有道云保存文章时,可以正常把公众号的图片正常拉下来的。
 
然后右键,导出word。 对,有道云笔记这个功能。
 
然后打开保存的word文件,全选,复制里面的内容,包含图片。
 
 
然后ctrl+v 粘贴到typora。
 
然后图片就可以正常上传的腾讯云,七牛云的文件服务器啦。
 
  查看全部
正常使用typora的时候,复制网页的内容,可以直接把远程的图片也顺带抓下来,同时上传到诸如七牛,腾讯cos的服务器。
 
可是对于微信公众号的文章,typora复制出来的图片都是一样的。主要原因是公众号的图片命名都叫640.png。
 
以至于上传的图片都是同一张。
 
那么如何解决这个问题呢?
 
我们可以绕道。
 
先用有道云笔记保存公众号的文章。
 
有道云保存文章时,可以正常把公众号的图片正常拉下来的。
 
然后右键,导出word。 对,有道云笔记这个功能。
 
然后打开保存的word文件,全选,复制里面的内容,包含图片。
 
 
然后ctrl+v 粘贴到typora。
 
然后图片就可以正常上传的腾讯云,七牛云的文件服务器啦。
 
 

腾讯云添加cdn加速后 域名加上www无法访问

网络李魔佛 发表了文章 • 0 个评论 • 1966 次浏览 • 2022-05-06 00:31 • 来自相关话题

比如 原来网址 为 30daydo.com, 没有使用cdn加速之前,在浏览器输入 30daydo.com 或者 www.30daydo.com 都可以正常访问。
 
而加入了cdn加速之后,30daydo.com 可以正常访问, 而www.30daydo.com 却访问异常。
 
解决方法:
www的域名访问 也要加入一个cdn加速记录。
 
如下图所示:
 

 
添加完记录后,需要在你的DNSPod 的域名解析里面,把这个www的解析CNAME也加进去。 这一步也不能少。
 

 
类型要填写CNAME,不能填A哦。
 
然后过大概十来分钟才能生效。并不是马上就生效的哦。
  查看全部
比如 原来网址 为 30daydo.com, 没有使用cdn加速之前,在浏览器输入 30daydo.com 或者 www.30daydo.com 都可以正常访问。
 
而加入了cdn加速之后,30daydo.com 可以正常访问, 而www.30daydo.com 却访问异常。
 
解决方法:
www的域名访问 也要加入一个cdn加速记录。
 
如下图所示:
 

 
添加完记录后,需要在你的DNSPod 的域名解析里面,把这个www的解析CNAME也加进去。 这一步也不能少。
 

 
类型要填写CNAME,不能填A哦。
 
然后过大概十来分钟才能生效。并不是马上就生效的哦。
 

使用代理VPN后,微信公众号发文章显示的是代理后的VPN归属地

闲聊李魔佛 发表了文章 • 0 个评论 • 4818 次浏览 • 2022-05-05 00:28 • 来自相关话题

最近各种平台论坛都加入了归属地显示的功能。
 
公众号也不例外。
 
如果想修改归属地,首先需要有一个代理或者VPN软件。设置为全局代理,然后发文,你的发文地址就会显示你的代理和VPN地址啦。
  查看全部
最近各种平台论坛都加入了归属地显示的功能。
 
公众号也不例外。
 
如果想修改归属地,首先需要有一个代理或者VPN软件。设置为全局代理,然后发文,你的发文地址就会显示你的代理和VPN地址啦。
 

网易的云笔记新版出linux版本了

Linux李魔佛 发表了文章 • 0 个评论 • 952 次浏览 • 2022-04-30 19:05 • 来自相关话题

果然是良心企业。
果然是良心企业。

typora markdown文章 快速清除文章内的所有超链接

闲聊李魔佛 发表了文章 • 0 个评论 • 3602 次浏览 • 2022-04-27 12:11 • 来自相关话题

typora文章内,如果拷贝了他人的网页内容,如果文章内嵌入了大量的超链接,比如下面这样的:

 
 
如何快速地清除这些超链接呢?
 
很简单,只要你把要删除的超链接区域选中,如果全文的话,ctrl+A ,
然后按下快捷键 Ctrl + \ 
 
就可以快速清除样式,所有的超链接就会不见了的。 
 
  查看全部
typora文章内,如果拷贝了他人的网页内容,如果文章内嵌入了大量的超链接,比如下面这样的:

 
 
如何快速地清除这些超链接呢?
 
很简单,只要你把要删除的超链接区域选中,如果全文的话,ctrl+A ,
然后按下快捷键 Ctrl + \ 
 
就可以快速清除样式,所有的超链接就会不见了的。 
 
 

wordpress安装了jetpack插件速度慢得一批

网络李魔佛 发表了文章 • 0 个评论 • 1483 次浏览 • 2022-04-26 09:17 • 来自相关话题

wordpress安装了jetpack后,默认的wp super cache的cdn就会使用jetpack的节点作为cdn,其url地址为 “i0.wp.com”等,实际使用后的访问速度还不如wp super cache默认的静态速度快。
 
果断卸载了。
 
  查看全部
wordpress安装了jetpack后,默认的wp super cache的cdn就会使用jetpack的节点作为cdn,其url地址为 “i0.wp.com”等,实际使用后的访问速度还不如wp super cache默认的静态速度快。
 
果断卸载了。
 
 

docker wordpress无法上传图片到uploads目录

网络李魔佛 发表了文章 • 0 个评论 • 1458 次浏览 • 2022-04-25 12:38 • 来自相关话题

在写文章的时候插入图片,报错。

无法将上传的文件移动至wp-content/uploads/

uploads文件夹权限不够。
这个时候需要进入到docker里面,赋予一定的写权限。
 
网上看到很多人直接来一个命令:
chmod -R 777 uploads/
 
这种玩意对方上传一个可执行文件到uploads,后面利用漏洞执行这个路径。 那么你的站点可能就落入到其他人手上了。
 
所以只要保证设置非这个用户组的用户只给与读写的权限,不给与执行x的权限
7 7 6 , 所以正确的写法是:
 
chmod -R 776 uploads/
 
后面再上传一次文件,就成功了。
  查看全部
在写文章的时候插入图片,报错。


无法将上传的文件移动至wp-content/uploads/


uploads文件夹权限不够。
这个时候需要进入到docker里面,赋予一定的写权限。
 
网上看到很多人直接来一个命令:
chmod -R 777 uploads/
 
这种玩意对方上传一个可执行文件到uploads,后面利用漏洞执行这个路径。 那么你的站点可能就落入到其他人手上了。
 
所以只要保证设置非这个用户组的用户只给与读写的权限,不给与执行x的权限
7 7 6 , 所以正确的写法是:
 
chmod -R 776 uploads/
 
后面再上传一次文件,就成功了。
 

七牛云的图片图床配置到腾讯云域名解析

Linux李魔佛 发表了文章 • 0 个评论 • 1113 次浏览 • 2022-04-24 16:24 • 来自相关话题

官网的链接:
https://developer.qiniu.com/fusion/kb/1322/how-to-configure-cname-domain-name
 
一般按照上面链接创建就可以了。
 
这里有个值要注意的,主机记录
描述如下:
主机记录 填写加速域名对应的主机前缀 该参数唯一,请勿自定义

 
这里你的主机记录是你的二级域名的部分,
比如你的二级域名是 img.30daydo.com
那么这里你的主机记录就是 img
 
  查看全部
官网的链接:
https://developer.qiniu.com/fusion/kb/1322/how-to-configure-cname-domain-name
 
一般按照上面链接创建就可以了。
 
这里有个值要注意的,主机记录
描述如下:
主机记录 填写加速域名对应的主机前缀 该参数唯一,请勿自定义

 
这里你的主机记录是你的二级域名的部分,
比如你的二级域名是 img.30daydo.com
那么这里你的主机记录就是 img
 
 

讯投QMT python API文档

股票李魔佛 发表了文章 • 0 个评论 • 2406 次浏览 • 2022-04-23 01:35 • 来自相关话题

 

 

需要的可以到公众号后台留言获取: qmt接口文档

 
需要开通qmt可以联系微信: (目前交易费率万一免五)

  查看全部

 

 

需要的可以到公众号后台留言获取: qmt接口文档

 
需要开通qmt可以联系微信: (目前交易费率万一免五)

 

docker nginx+php部署的wordpress,安装插件不需要ftp账号

Linux李魔佛 发表了文章 • 0 个评论 • 1413 次浏览 • 2022-04-22 23:43 • 来自相关话题

使用docker搭建的每一个组件,php,nginx,mysql,弄得wordpress站点。
 
配置好之后,如果需要安装第三方的应用,每次需要FTP账号,用于远程下载这个插件文件到wordpress的plugin目录下。
 
不过为了这个插件功能再开个ftp服务,还暴露了端口,有点鸡肋。
 
于是按照网上的教程倒腾,不过网上的教程都没有使用docker操作,按照他们的操作是没能把问题解决的。
 
主要是用户名不一样。
 
1. 进入nginx的容器中,注意是nginx,而不是php
docker exec -it xxxx /bin/bash
 
2. 修改nginx的 wordpress的根目录所有者权限
注意这里的用户名是 www-data , 而不是www
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
不要乱信网上的人说,要改为777, 除非你想把你的服务器送给别人做肉鸡。
 
然后刷新一下页面,就可以直接安装,而跳过那个ftp密码, 查看全部
使用docker搭建的每一个组件,php,nginx,mysql,弄得wordpress站点。
 
配置好之后,如果需要安装第三方的应用,每次需要FTP账号,用于远程下载这个插件文件到wordpress的plugin目录下。
 
不过为了这个插件功能再开个ftp服务,还暴露了端口,有点鸡肋。
 
于是按照网上的教程倒腾,不过网上的教程都没有使用docker操作,按照他们的操作是没能把问题解决的。
 
主要是用户名不一样。
 
1. 进入nginx的容器中,注意是nginx,而不是php
docker exec -it xxxx /bin/bash
 
2. 修改nginx的 wordpress的根目录所有者权限
注意这里的用户名是 www-data , 而不是www
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html

不要乱信网上的人说,要改为777, 除非你想把你的服务器送给别人做肉鸡。
 
然后刷新一下页面,就可以直接安装,而跳过那个ftp密码,

docker php fpm里面有个Kdevtmpfsi挖矿病毒

Linux李魔佛 发表了文章 • 0 个评论 • 1709 次浏览 • 2022-04-20 00:51 • 来自相关话题

官方应该不至于被植入病毒,很有可能就是使用的wordpress第三方的主题库。
一个欲思主题,一个大学主题。狗日了。
 
查看本地的连接。
netstat -atnlp

居然有2个ssh的连接,一个IP是美国的。一个是我自己的。
 
而且重启后这玩意还是自动被重连。
 
感觉被做了反向连接。
 
最后定位到的问题是,php的9000端口暴露了。导致被对方使用漏洞程序扫描,注入了病毒。
 

  查看全部
官方应该不至于被植入病毒,很有可能就是使用的wordpress第三方的主题库。
一个欲思主题,一个大学主题。狗日了。
 
查看本地的连接。
netstat -atnlp

居然有2个ssh的连接,一个IP是美国的。一个是我自己的。
 
而且重启后这玩意还是自动被重连。
 
感觉被做了反向连接。
 
最后定位到的问题是,php的9000端口暴露了。导致被对方使用漏洞程序扫描,注入了病毒。
 

 

1核2G的服务器 docker跑wordpress真够吃力

Linux李魔佛 发表了文章 • 0 个评论 • 1194 次浏览 • 2022-04-19 23:04 • 来自相关话题

性能太烂,预览个主题要等几分钟,甚至无响应。。。。
 
现在的wordpress加的内容可真多
性能太烂,预览个主题要等几分钟,甚至无响应。。。。
 
现在的wordpress加的内容可真多

python3 安装demjson 报错 use_2to3 is invalid

python李魔佛 发表了文章 • 0 个评论 • 4875 次浏览 • 2022-04-18 20:19 • 来自相关话题

ooking in indexes: https://pypi.douban.com/simple
Collecting demjson==2.2.4
Downloading https://pypi.doubanio.com/pack ... ar.gz (131 kB)
|████████████████████████████████| 131 kB 985 kB/s
ERROR: Command errored out with exit status 1:
command: /root/miniconda3/envs/py37/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-7ve4tu87
cwd: /tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/
Complete output (3 lines):
/root/miniconda3/envs/py37/lib/python3.7/site-packages/setuptools/dist.py:760: UserWarning: Usage of dash-separated 'index-url' will not be supported in future versions. Please use the underscore name 'index_url' instead
% (opt, underscore_opt)
error in demjson setup command: use_2to3 is invalid.

 记录一下解决办法:
setuptools 降级:
 
pip install --upgrade setuptools==57.5.0
 
然后再pip install demjson 即可
 
如果担心setuptools 修改到系统的其他库,可以创建一个虚拟环境。
然后在虚拟环境里面对setuptools 降级,再安装demjson 
 
来个养眼图: 查看全部
ooking in indexes: https://pypi.douban.com/simple
Collecting demjson==2.2.4
Downloading https://pypi.doubanio.com/pack ... ar.gz (131 kB)
|████████████████████████████████| 131 kB 985 kB/s
ERROR: Command errored out with exit status 1:
command: /root/miniconda3/envs/py37/bin/python -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"'; __file__='"'"'/tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-7ve4tu87
cwd: /tmp/pip-install-pj0ajcpl/demjson_86a1bab6643c4ed7a7b0c6bb6d3a43a2/
Complete output (3 lines):
/root/miniconda3/envs/py37/lib/python3.7/site-packages/setuptools/dist.py:760: UserWarning: Usage of dash-separated 'index-url' will not be supported in future versions. Please use the underscore name 'index_url' instead
% (opt, underscore_opt)
error in demjson setup command: use_2to3 is invalid.

 记录一下解决办法:
setuptools 降级:
 
pip install --upgrade setuptools==57.5.0
 
然后再pip install demjson 即可
 
如果担心setuptools 修改到系统的其他库,可以创建一个虚拟环境。
然后在虚拟环境里面对setuptools 降级,再安装demjson 
 
来个养眼图: