前言
程序员可能会私下给别人开发一些工具,但是通常要给别人试用一下,但是万一别人试用后,把你拉黑,那就白忙活了。今天就分享如何在 Python 里设置有效期。(文末送福利)
为了设置有效期,首先要获取当前时间,如果获取本地时间,那么别人可以通过修改操作系统的时间来一直保持有效。最好的办法就是获取网络时间。你说他断网怎么办?
如果断网,有两种方法,要么不给用,要么再取本地时间。
1、获取网络时间
如何获取网络时间呢,可以从 HTTP 返回的 Header 里获取时间,由于这个时间是 GMT 格式的 UTC 时间,我们还需要转为本地时间,下面的脚本都考虑到了,均采用标准库。
from datetime import datetime
from urllib.request import urlopen
import time
import ssl
import sys
ssl._create_default_https_context = ssl._create_unverified_context
def get_network_time():
url = "https://www.baidu.com"
try:
with urlopen(url) as res:
utctime = gmtstr_to_localtime(res.getheader("Date"))
return datetime_from_utc_to_local(utctime)
except Exception as e:
print("请检查网络设置")
sys.exit()
def gmtstr_to_localtime(gmtstr) -> datetime:
return datetime.strptime(gmtstr, "%a, %d %b %Y %H:%M:%S GMT")
def datetime_from_utc_to_local(utc_datetime):
now_timestamp = time.time()
offset = datetime.fromtimestamp(now_timestamp) - datetime.utcfromtimestamp(
now_timestamp
)
return utc_datetime + offset
if __name__ == "__main__":
print(get_network_time())
# Output:
# 2022-07-19 06:39:12
2、上锁
这一步很简单,一个日期判断就搞定了:
def lock():
now = get_network_time()
end_date = datetime(2022, 8, 26)
if now > end_date:
print("试用已到期")
sys.exit()
然后把上面获取网络时间的代码及 lock 函数均放在 lock.py 文件里,在我们的核心模块 core_work.py 中导入:
from lock import lock
def somefunc():
lock()
# do your work
在需要 lock() 的地方调用下 lock 函数就可以了。
你可能还需要一个 startup.py 脚本来启动整个程序:
from core_work import main
main()
3、编译 pyd
不编译的话,或者编译为 pyc 的话,上面的工作等于没做,pyc 可以直接反编译成 py 文件,连命名符号都不变。
编译的话,只需要需要把获取网络时间的代码,lock 函数的定义及调用 lock 的代码都编译成 pyd,本例子中就是 lock.py 和 core_work.py 编译成 lock.pyd 和 core_work.pyd,然后把源代码 lock.py 和 core_work.py 删除,其实就可以发布了,想破解只能反编译 pyd 文件,得到的是汇编代码,这个门槛已经拒绝了大多数的人。
pyd 的编译流程是 .py -> .c -> pyd,也就是说 pyd 是从 c 语言编译的,除了隐藏源代码之外,速度也会变快一些。
如果不放心的话,那就 pyinstall -k key startup.py 再加密打包一下,key 就是加密的密码,如果在 pyd 文件 import 了第三方库,那么要在 spec 文件中填写 hiddenimports。
如何编译 pyd 呢?代码如下:
from distutils.core import setup
from Cython.Build import cythonize
files = ["lock.py", "core_work.py"]
setup(
name="yourapp",
ext_modules=cythonize(files),
script_args=["build_ext", "-b", "./build", "-t", "./build/temp"],
)
运行之前你要 pip install cython。
然后在 build 文件夹就可以看到编译好的 pyd 文件,然后把他们移动到源代码的位置,重命名为 xxx.pyd 就可以了。
接单网站有哪些?
比如:猪八戒网,一品威客,微推推等等,给大家做了一个整理。
如果你也对Python感兴趣的话,可以试试这套python学习资料,毕竟小编也是用这套方法自学的
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑培训的。
一方面是学习时间相对较短,学习内容更全面更集中。
零基础Python学习资源介绍
👉Python学习路线汇总👈
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(学习教程文末领取哈)
👉Python必备开发工具👈
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末
👉Python学习视频600合集👈
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉实战案例👈
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉100道Python练习题👈
检查学习结果。
👉面试刷题👈
资料领取
上述这份完整版的Python全套学习资料已经上传优快云官方,朋友们如果需要可以微信扫描下方优快云官方认证二维码输入“领取资料” 即可领取
好文推荐
了解python的前景:https://blog.youkuaiyun.com/weixin_49895216/article/details/127186741
了解python能做什么:https://blog.youkuaiyun.com/weixin_49895216/article/details/127124870