Python 3.3 及以上版本自带 venv 模块,可以直接使用。
在你的项目目录下,运行以下命令来创建一个虚拟环境,这将在项目目录下创建一个名为 myenv 的文件夹,其中包含虚拟环境的所有文件:
python -m venv myenv
Windows:
myenv\Scripts\activate
macOS 和 Linux:
source myenv/bin/activate
在虚拟环境中,你可以使用 pip 来安装项目所需的库:
pip install requests
安装的库将只会影响当前虚拟环境,而不会影响系统的 Python 环境或其他项目。
为了确保你的项目依赖可以在其他环境中重现,你可以使用以下命令将当前环境的依赖写入 requirements.txt 文件:
pip freeze > requirements.txt
requirements.txt 文件将包含所有当前环境中的安装包及其版本信息。
在新的环境中,你可以使用 requirements.txt 文件来安装所需的所有依赖:
pip install -r requirements.txt
当你完成工作时,可以通过以下命令退出虚拟环境:
deactivate
使用虚拟环境进行Python开发可以有效地隔离项目依赖,避免版本冲突。通过创建和激活虚拟环境、安装依赖、冻结依赖并在新环境中重新安装依赖,可以确保你的项目在不同环境中具有一致的运行表现。
]]>python 官网:https://www.python.org/
当前最新版是 3.8.5,在这个页面找到地址:https://www.python.org/downloads/release/python-385/
下载 tgz 压缩包到本地并解压:
cd /tmp
wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz
tar xvf Python-3.8.5.tgz
编译需要安装一些依赖:
apt install libffi-dev libgdbm-dev libsqlite3-dev libssl-dev zlib1g-dev
python 源码使用标准 GNU 编译系统,详细说明参考:https://blog.niekun.net/archives/883.html
将 python 安装到 /opt
目录,先创建文件夹:
mkdir /opt/python3.8.5
然后配置 configure:
cd /tmp/Python-3.8.5
./configure \
--prefix=/opt/python3.8.5 \
--enable-optimizations \
没有错误提示的话就开始编译和安装:
make
make install
安装完成后测试执行:
/opt/python3.8.5/bin/python3 --version
返回版本信息则安装完成。
下面将可执行文件加入系统路径,创建软连接:
ln -s /opt/python3.8.5/bin/python3 /usr/bin/python
测试运行:
python --version
源码编译安装的 python 不自带 pip,需要自己安装,可以使用 get-pip.py 脚本来安装。
官网:https://pip.pypa.io/en/stable/installing/
下载脚本到本地:
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
使用刚才安装的 python 执行脚本:
/opt/python3.8.5/bin/python3 get-pip.py
pip 的安装路径是 /opt/python3.8.5/bin/
,测试命令:
/opt/python3.8.5/bin/pip3 --version
返回版本信息则安装完成。
添加软连接到系统路径:
ln -s /opt/python3.8.5/bin/pip3 /usr/bin/pip
测试命令:
pip --version
subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)
执行cmd命令并返回结果到字符串。
用法:
import subprocess
output = check_output(["cat", "/etc/hostname"]).strip()
print(output)
以上脚本会执行 cat /etc/hostname
命令然后将结果赋值给 output
变量。strip()
可以将 string 的前后空格去掉。
>>> 'foo'.encode('utf_8')
b'foo'
To transform a byte string to a unicode string:
>>> b'foo'.decode('utf_8')
'foo'
To convert a string to bytes.
data = "" #string
data = "".encode() #bytes
data = b"" #bytes
To convert bytes to a String.
data = b"" #bytes
data = b"".decode() #string
data = str(b"") #string
import winreg
REG_PATH = r"Control Panel\Mouse"
def set_reg(name, value):
try:
winreg.CreateKey(winreg.HKEY_CURRENT_USER, REG_PATH)
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0,
winreg.KEY_WRITE)
winreg.SetValueEx(registry_key, name, 0, winreg.REG_SZ, value)
winreg.CloseKey(registry_key)
return True
except WindowsError:
return False
def get_reg(name):
try:
registry_key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, REG_PATH, 0,
winreg.KEY_READ)
value, regtype = winreg.QueryValueEx(registry_key, name)
winreg.CloseKey(registry_key)
return value
except WindowsError:
return None
#Example MouseSensitivity
#Read value
print (get_reg('MouseSensitivity'))
#Set Value 1/20 (will just write the value to reg, the changed mouse val requires a win re-log to apply*)
set_reg('MouseSensitivity', str(10))
#*For instant apply of SystemParameters like the mouse speed on-write, you can use win32gui/SPI
#http://docs.activestate.com/activepython/3.4/pywin32/win32gui__SystemParametersInfo_meth.html
]]>Bad Request: BUTTON_DATA_INVALID
反复检查代码没有发现语法错误,查找之后了解到 InlineKeyboardButton 响应后返回的 Callback Data 有大小限制,最大64位:
的确我想返回的内容长度的确超过了大小限制,优化源码后问题解决了。
参考链接:
https://core.telegram.org/bots/api#inlinekeyboardbutton
https://stackoverflow.com/questions/46389040/inlinekeyboardbutton-are-limited-in-inlinekeyboardmarkup-telegram-bot-c-sharp
可以用来运行终端命令:
import os
os.system('date')
-----------------------
The current date is: 10/17/2019 Thu
用来将匹配的文件放入数组:
import glob
import os
CWD = os.getcwd()#当前目录路径
for name in glob.glob(CWD+'/*'):
print(name)
以上输出当前目录下所有文件的文件名。
for name in glob.glob(CWD+'/file?.txt'):
print(name)
以上输出 filea.txt, fileb.txt filec.txt 等文件名。
可以使用类似正则表达式的方式匹配文件名:
glob.glob(CWD+'/*[12].*')
从python3.5开始,支持使用一下方法进行递归搜索目录内文件及文件夹:
for name in glob.glob(CWD+'/**/*', recursive=True):
print(name)
以上会输出目录内文件及子文件夹内文件。
字符串分割:
按空格分割,注意两个部分之间的空格可以是1个或多个,不影响分割效果:
txt = "welcome to the jungle"
x = txt.split()
将 txt 字符串按空格来分成4个部分,x 是数组。
分割成设定的个数:
txt = "welcome to the jungle"
x = txt.split(' ', 1)
输出结果:x = ['welcome', 'to the jungle']
按特定字符分割:
txt = "apple#banana#cherry#orange"
x = txt.split("#", 1)
输出结果:x = ['apple', 'banana#cherry#orange']
用于 iterator 的顺序提取。
mylist = iter(["apple", "banana", "cherry"])
x = next(mylist)
print(x)
y = next(mylist)
print(x)
z = next(mylist)
print(x)
输出结果:x = 'apple' y = 'banana' z = 'cherry'
用于字符串内的赋值:
print ("{}, A computer science portal for geeks".format("GeeksforGeeks"))
输出:GeeksforGeeks, A computer science portal for geeks
多个输入参数:
print ("Hi ! My name is {} and I am {} years old"
.format("User", 19))
带索引的多参数输入:
print("Every {3} should know the use of {2} {1} programming and {0}"
.format("programmer", "Open", "Source", "Operating Systems"))
输出结果:Every Operating Systems should know the use of Source Open programming and programmer
删除字符串前和后的空格:
txt = " banana "
x = txt.strip()
输出:x = 'banana'
删除字符串前和后的自定义字符:
txt = ",,,,,rrttgg.....banana....rrr"
x = txt.strip(",.grt")
输出: x = 'banana'
]]>我是用的是 python3.8,使用系统包管理器安装:
apt install python3
如果系统内安装了多个版本的 python,修改 /usr/bin/python 的默认链接,具体修改方法查看此教程:
https://niekun.net/index.php/archives/413.html
安装或升级:
pip install python-telegram-bot --upgrade
原来的 youtube-dl 最近好久不更新了,发现下载速度极慢,最近切换到 yt-dlp 效果很好。
GitHub:https://github.com/yt-dlp/yt-dlp
pip 方式安装及更新:
python3 -m pip install -U yt-dlp
instaloader 可以下载 Instagram 的图片或视频。
GitHub 主页:https://github.com/instaloader/instaloader
instaloader 需要 python 3.5 以上。推荐直接安装最新版 python。
使用 pip3 安装:
pip3 install instaloader --upgrade
首先在 telegram 客户端内添加 BotFather
Creating a new bot
Use the /newbot
command to create a new bot. The BotFather will ask you for a name and username, then generate an authorization token for your new bot.
The name
of your bot is displayed in contact details and elsewhere.
The Username
is a short name, to be used in mentions and telegram.me links. Usernames are 5-32 characters long and are case insensitive, but may only include Latin characters, numbers, and underscores. Your bot's username must end in ‘bot’, e.g. ‘tetris_bot’ or ‘TetrisBot’.
The token
is a string along the lines of 110201543:AAHdqTcvCH1vGWJxfSeofSAs0K5PALDsaw
that is required to authorize the bot and send requests to the Bot API. Keep your token secure and store it safely, it can be used by anyone to control your bot.
Generating an authorization token
If your existing token is compromised or you lost it for some reason, use the /token
command to generate a new one.
我的开源地址:https://github.com/nie11kun/telegram-bot-youtube-downloader
使用脚本需要配置两个环境变量:BOT_TOKEN, INS_ACCOUNT。分别是 bot token 和你的 Instagram 用户名。
较新的 Linux 发行版可以使用 systemd 来实现自动启动,参考:https://blog.niekun.net/archives/1334.html
以下是 telegrambot-downloader.service unit 内容:
[Unit]
Description=telegrambot to download media Service
After=network.target nss-lookup.target
[Service]
User=root
EnvironmentFile=/etc/env_addon
ExecStart=/usr/bin/python /home/script/telegram-bot-youtube-downloader/main.py
Restart=on-failure
[Install]
WantedBy=multi-user.target
其中 EnvironmentFile 指向了自定义的环境变量文件地址,文件内容如下:
BOT_TOKEN=xxxxxxxxxxxxxx
INS_ACCOUNT=xxxxxx
from tornado.httpserver import HTTPServer from tornado.httpserver import HTTPServer
syntaxError: invalid syntax
可能是 tornado 版本过高,需要进行降级:
pip install tornado==4.5.3
]]>