Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 脚本如何设置试用期

Python 脚本如何设置试用期

作者头像
somenzz
发布于 2022-10-25 12:55:20
发布于 2022-10-25 12:55:20
58800
代码可运行
举报
文章被收录于专栏:Python七号Python七号
运行总次数:0
代码可运行

程序员可能会私下给别人开发一些工具,但是通常要给别人试用一下,但是万一别人试用后,把你拉黑,那就白忙活了。今天就分享如何在 Python 里设置有效期。

为了设置有效期,首先要获取当前时间,如果获取本地时间,那么别人可以通过修改操作系统的时间来一直保持有效。最好的办法就是获取网络时间。你说他断网怎么办?

如果断网,有两种方法,要么不给用,要么再取本地时间。

1、获取网络时间

如何获取网络时间呢,可以从 HTTP 返回的 Header 里获取时间,由于这个时间是 GMT 格式的 UTC 时间,我们还需要转为本地时间,下面的脚本都考虑到了,均采用标准库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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、上锁

这一步很简单,一个日期判断就搞定了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 中导入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from lock import lock

def somefunc():
    lock()
    # do your work

在需要 lock() 的地方调用下 lock 函数就可以了。

你可能还需要一个 startup.py 脚本来启动整个程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 呢?代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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 就可以了。

最后的话

以上编程技巧,简单实用,如果有帮助,还请点赞、在看、转发支持。有问题,欢迎留言讨论

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在VMware环境安装Ubuntu Server中遇到的无法安装问题
我们项目最近在测试pihole dns, 所以想要安装Ubuntu Server测试,结果发现报错。
繁华是客
2023/03/03
5.1K0
在 Linux 上使用网络配置工具 Netplan
多年以来 Linux 管理员和用户们以相同的方式配置他们的网络接口。例如,如果你是 Ubuntu 用户,你能够用桌面 GUI 配置网络连接,也可以在 /etc/network/interfaces 文件里配置。配置相当简单且可以奏效。在文件中配置看起来就像这样:
用户8989785
2021/09/10
2.6K0
Ubuntu 18.04 网卡配置
其网卡配置文件为:/etc/netplan/50-cloud-init.yaml,,netplan 描述文件采用了 yaml 语法,默认是用dhcp方式,如果要配置静态地址,则需要修改此文件的想关内容 参考:https://netplan.io/
大大大黑白格子
2020/03/27
6.3K0
Ubuntu 18.04 网卡配置
Ubuntu24.04 设置固定静态 IP
虚拟机安装 ubuntu24.04 server 最新版,为了防止每次重启电脑 dhcp 导致 ip 发生变更,所以需要固定一下,因为 centos 长期版已无,目前所有新机器我都切换到 ubuntu 服务器版本了,发现固定 ip 和 centos 还是有很大不同,所以做下备忘,快速查阅,并且安装 ubuntu 默认初始化磁盘分区不会使用全部空间,本文也给出装完系统后将所有剩余空间都叠加到根目录,以免后续空间不足。
Lcry
2025/03/06
1.1K0
Ubuntu 18.04 修改和添加额外IP地址
Ubuntu从18.04开始就使用Netplan来进行IP地址的管理,跟以前添加IP地址的方法有所区别;
会长君
2023/04/25
1.5K0
Ubuntu 18.04 修改和添加额外IP地址
如何在Ubuntu 20.04 LTS上配置静态IP地址
Ubuntu 从 17.10 开始,已放弃在 /etc/network/interfaces 里固定 IP 的配置,interfaces 文件不复存在,即使配置也不会生效,而是改成 netplan 方式 ,配置写在 /etc/netplan/01-netcfg.yaml 或者类似名称的 yaml 文件里。
用户8965210
2021/10/14
13K0
Netplan on Ubuntu 用于网络管理
在Ubuntu 18.04 平台上,其使用Netplan管理系统网络。Netplan 可以通过yaml 格式的配置文件(位于/etc/netplan),生成 NetworkManager 或 systemd-network 所需要的配置文件,用于配置网络。Ubuntu从17.10起,就使用netplan代替了之前的ifupdown的linux系统默认的网络管理工具。之前的网络配置,常编辑 /etc/network/interfaces文件,并重启网络服务;netplan的引入,使得网络配置更方便。
西湖醋鱼
2021/01/04
2K0
Netplan on Ubuntu 用于网络管理
【详解】ping得通外网IP,ping不通外网域名的解决办法
在日常的网络管理或开发过程中,有时会遇到一个奇怪的问题:能够通过IP地址成功ping通外网服务器,但使用域名时却无法ping通。这种情况下,问题通常不在于网络连接本身,而可能是DNS解析出现了问题。本文将探讨几种可能的原因及相应的解决方法。
大盘鸡拌面
2025/01/26
1.4K0
解决内网ubuntu20.04无法进行域名解析的问题
有时有些机器部署在内网,有关内网ubuntu如何通过fiddler代理执行apt命令、下载docker镜像的问题可以参考笔者的其他文章:https://blog.csdn.net/john1337/category_10165743.html
johnhuster的分享
2022/03/28
5.6K0
解决内网ubuntu20.04无法进行域名解析的问题
如何在 Linux 上刷新 DNS 缓存?
DNS(Domain Name System)是一个用于将域名解析为相应 IP 地址的网络服务。在 Linux 操作系统上,为了提高 DNS 查询的性能和效率,系统会缓存最近的 DNS 查询结果。但有时候你可能需要手动刷新 DNS 缓存,以便获取最新的 DNS 解析结果。本文将介绍如何在 Linux 上刷新 DNS 缓存,并提供详细的步骤。
网络技术联盟站
2023/06/19
8.9K0
如何在 Linux 上刷新 DNS 缓存?
DNS 解析问题:DNS 解析失败,无法访问域名
是山河呀
2025/02/05
4.8K0
ubuntu 17.10 设置固态IP
设置了基本的环境之后,需要设置固定的ip,要不然每次启动都变IP,我每次调整IP都得疯了。
魔王卷子
2019/05/28
1.1K0
Ubuntu 18.04 永久修改DNS的方法
发现每次在/etc/resolv.conf 修改DNS之后,重启服务器DNS就会重置为原始127.0.0.53。
yaohong
2021/06/01
25.7K0
Ubuntu 18.04 永久修改DNS的方法
关于ubuntu系统下使用netplan做网关配置无法生效的排查
在一次服务器例行重启维护后,发现网络无法联通,带外登录发现IP未能配置在网卡上。以下是一些排查步骤:
yiwei
2024/10/15
1.8K0
影响ubuntu18.04系统DNS的几个因素
/etc/resolv.conf 文件里面的dns服务器是实时生效的,发现ubuntu18.04和Centos系列的差别很大,ubuntu18.04是个软链接并建议不要去修改;centos系列是个配置文件,可以直接修改使用。
zd123
2021/07/29
7470
【教程】Warp/ZeroTrust 1.1.1.1 域名解析服务的安装与使用
        1.1.1.1是一款免费的域名解析服务,也就是域名服务器,由CloudFlare与APNIC共同拥有与维护。该服务于2018年4月1日发表启用,且被Cloudflare称为“互联网最快、以隐私优先的消费者端DNS服务”(the Internet's fastest, privacy-first consumer DNS service)。
小锋学长生活大爆炸
2023/05/26
24.5K2
【教程】Warp/ZeroTrust 1.1.1.1 域名解析服务的安装与使用
如何在Debian 9上将BIND配置为专用网络DNS服务器
管理服务器配置和基础架构的一个重要部分包括通过设置适当的域名系统(DNS),维护一种通过名称查找网络接口和IP地址的简便方法。使用完全限定的域名(FQDN)而不是IP地址来指定网络地址可以简化服务和应用程序的配置,并提高配置文件的可维护性。为您的专用网络设置自己的DNS是改善服务器管理的好方法。
穿鞋跑得快
2018/11/05
4.6K0
网络基本配置查询
前言:主要针对于Linux中网络/路由/通信通道类命令进行学习,加深对Linux的使用;
全栈工程师修炼指南
2022/09/28
2.8K0
网络基本配置查询
如何在 Linux 上刷新 DNS 缓存?
DNS(域名系统)是互联网的一项服务,它作为将域名和 IP 地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用记住能够被机器直接读取的 IP 数串。在使用域名访问网站时,电脑会将域名解析为 IP 地址。为了提高解析速度,操作系统通常会将解析过的地址存储在 DNS 缓存中。
网络技术联盟站
2024/06/13
1.8K0
如何在 Linux 上刷新 DNS 缓存?
ubuntu 18.04 设置静态ip方法
本教程将会演示如何设置Ubuntu16.04 Server版和Ubuntu18.04 Server版系统的静态固定IP地址。
yaohong
2019/09/26
3.8K0
推荐阅读
相关推荐
在VMware环境安装Ubuntu Server中遇到的无法安装问题
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验