人在代码已经生活多年,分享一下最近在技术收获

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理

本文章来自腾讯云 作者:somenzz

阅读本文大概需要 4 分钟。

凡人皆有一死,凡人皆需侍奉。

很喜欢这句高等瓦雷利亚语,简单却蕴含人生哲理。

程序员是个非常辛苦的职业,为了写出健壮的代码,可能要牺牲娱乐和休息的时间。但这是值得的,只要你的代码有价值,也就是能满足特定人群的需求,或节省他们的时间,或解决他们的问题,这些付出最终都能带来金钱上的回报。

那么先想好你的优势,你的擅长的方面,最适合侍奉何种人群,能帮他们解决什么问题,在哪些方面需要与人合作,哪些方面需要自己学习,这都是要先考虑的。

作为技术人员,侍奉的一定是非技术人员,因为技术人员的问题已经自己通过技术解决了。因此你写的程序就要易用,健壮。这两个要求已经够你折腾一阵子了。

最近我在业余时间做的两件事情:

1、完善云端学习助手,使之更加易用,实现一键双击就可以使用,无需要安装任何其他软件。星球介绍链接:https://t.zsxq.com/i2jyZNj

2、与朋友一起开发了一个学习类网站,青蛙学堂,网站:https://www.qwxtw.com

做这些事情一方面是出于兴趣,另一方面有人买单,做起来自然动力十足,虽然经常写代码到 12 点,也不觉得太累。以上都是使用 Python 开发。在开发的过程中有 4 点新的收获,分享在这里,希望对于从事技术的你也所帮助。

1、如何让 Python 程序在 Windows 平台通用?

Python 代码要想执行,机器上必须有一个 Python 解释器,也就是从官网下载的 Python 安装程序。但想运行你写的程序的人,自己电脑上不一定有 Python 解释器,可能也不会安装,不会设置环境变量,不会打开命令窗口。

最好的方法是像 C 或 C++ 那样,直接编译成 exe 文件,别人一运行这个 exe 文件就可以运行。Python 提供了类似的工具,pyinstaller 和 py2exe 都可以将 Python 源文件(.py)打包成 exe 文件。但这个 exe 文件并不是走真正编译生成的,是把 Python 解释器和 Python 源文件打包在一起,因此生成的 exe 文件都很大。

上述方法不能保证每台机器都能正常运行,因为它依赖很多 Windows dll 文件,而且在打包过程中很容易报错,也是缺少各种各样的头文件。

后来我发现 Python 官网中提供了这样的一种版本:Windows x86-64 embeddable zip file。看了官网的介绍,这是一个绿色名安装的 Python 解释器,可以嵌入其他程序中以便执行 Python 程序,最新的 Python3.7 版本解压后也就 25M,并不大,这正是我想要的。

写好 Python 代码后,将 python 源代码和 python-3.7.4-embed-amd64 放在一起,发送给别人,再提供一个 startup.bat 文件,写入以下内容:

python-3.7.4-embed-amd64\python.exe yourPythonScript.py
pause

这样,别人双击 startup.bat 即可运行你提供的 Python 程序。如果代码中使用第三方的库。则需要修改 python-3.7.4-embed-amd64 目录下的 python37._pth 文件,把最后一行的注释去掉,文件内容应该是这样的:

python37.zip
.
# Uncomment to run site.main() automatically
import site

然后将同版本 Python pip 安装后的包从 site-packages 复制到 python-3.7.4-embed-amd64\Lib\site-packages 即可。

这样下来,你写的所有 Python 程序都可以放在这里,免去别人安装各种软件和依赖的麻烦,别人解压你的提供的压缩包,双击 startup.bat 即可运行,不需要任何额外的配置,简单易行,不懂技术的小白也可以使用。

2、如何保护 Python 源码,不被反编译破解。

Python 是一种解释型语言,解释型的语言特点就是常容易被反编译,如果代码中涉及加密环节,一但被破解就不好玩了。虽然 Python 也支持编译成 Python 字节码,如 pyc、pyo 文件,但可以轻松反编译,如 uncompyle6 就可以轻松反编译,代码规范的话,甚至连注释都给你还原出来。

上述的 py2exe,pyinstaller 虽然也起一定的保护作用,但其本质是打包,不是编译,因此也可以破解,感兴趣的可以去网上搜索下。

最彻底的方式是使用编译型的语言来写代码,像 C、C++ 那样,编译后直接生成机器代码,全是二进制的 0 或 1,无论如何也是没有办法反编译出来的。

借助这个思路就有两种方案:

1、并不是所有的代码都需要保密:需要保密的那部分代码可以使用 C 来写,然后生成使用 gcc 等编译器生成 Windows 的动态链接库文件 dll 文件,然后使用 Python 来引入 dll 文件。

import ctypes
dll = ctypes.windll.LoadLibrary( 'test.dll' )

这样,我们就可以使用 dll.function() 来调用 dll 文件中的函数了。

2、生成 pyd 文件,pyd 文件本质是 dll 文件,是适用于 Python 的 dll 文件,因此叫 pyd,可以可直接被 python 通过 import 导入。以下代码可以将 python 源代码直接编译成 pyd 文件。

注意先安装 Cython

pip install Cython

setup.py 文件内容,可根据需要进行修改。

from distutils.core import setup
from Cython.Build import cythonize

build_dir = 'build'
build_tmp_dir = 'build/temp'

setup(
    name = 'myapp',
    ext_modules=cythonize(['aaa.py','bbb.py','ccc.py']),
    #script_args=["build_ext", "-b", build_dir, "-t", build_tmp_dir],
    script_args=["install",]
)

在目录内执行 python setup.py 即可将 aaa.py,bbb.py,ccc.py 编译成对应的 pyd 并安装在 Python 的库目录 site-packages 中。

在写代码时可以直接以 import aaa,bbb,ccc 这样的方式来使用,就像引用其他Python文件一样,但是你无法查看 aaa,bbb,ccc 内的源代码,也几乎不可能被反编译,也就不可能被破解了。

大部分情况下,你在编译成 pyd 时都会报错,提示缺少 vcvarsall.bat。

解决方法:https://devblogs.microsoft.com/python/unable-to-find-vcvarsall-bat/#comments
对于 Python3 来说,安装下 vs2019 就可以了,选择 C/C++ 组件,及 Windows 10 sdk。约占用 4G 左右空间。

在 Linux 系统下,对应的是 so 文件,道理是相通的,掌握一个系统,很容易搞定其他系统。

3、使用 Django-rest-framework 开发后端接口,使用 JWT 认证。

什么是 JWT,如何使用,有一篇博文写的非常好,我就不再重复写了,有用到的点击下面的链接看下:
https://blog.csdn.net/weixin_42578481/article/details/86599681

4、使用 Nginx 配置 https 服务器,并自动更新证书。

同样有一篇非常好的博文,我当时就是参考这个配置成功的,放在此处,需要的可以自行访问。
HTTPS 简介及使用官方工具 Certbot 配置 Let’s Encrypt SSL 安全证书详细教程:
https://10.linuxstory.net/deploy-lets-encrypt-ssl-certificate-with-certbot/

先配置好 http 服务器,cerbot-auto 会自动为你配置 https 的配置,这里贴下我自己 nginx 的配置,供参考:

server {
    server_name www.your_name.com; # managed by Certbot
        root         /usr/share/nginx/html;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            include  uwsgi_params;
            uwsgi_pass  127.0.0.1:8080;              
            uwsgi_param UWSGI_SCRIPT you_dir.wsgi; 
            uwsgi_param UWSGI_CHDIR /home/xxxx/xxxx/you_dir; 
            index  index.html index.htm;
            client_max_body_size 35m;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }

    listen [::]:443 ssl ipv6only=on; # managed by Certbot
    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/www.your_name.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/www.your_name.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

}

server {
    if ($host = www.your_name.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

        listen       80 ;
        listen       [::]:80 ;
    server_name www.your_name.com;
    return 404; # managed by Certbot
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容