方案一: 用Docker,可以自己制作一个装有Python3的环境,一个例子Dockerfile:
FROM ubuntu:latest
MAINTAINER user
ENV TIME_ZONE Asia/Shanghai
ENV APP_USER="root" \
APP_HOME="/opt" \
COPY ./conf/sources.list /etc/apt/sources.list
COPY ./python3_pkg.txt /tmp
RUN Deps='python3-pip tzdata net-tools ' \
&& export DEBIAN_FRONTEND=noninteractive \
&& apt-get clean \
&& apt-get update \
&& apt-get install -y $Deps \
#设置时区
&& echo "${TIME_ZONE}" > /etc/timezone \
&& ln -sf /usr/share/zoneinfo/${TIME_ZONE} /etc/localtime \
#安装python3包
&& pip3 install -r /tmp/python3_pkg.txt \
&& rm /tmp/python3_pkg.txt \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /root/.cache
EXPOSE 80/tcp
ENV LANG C.UTF-8
ENV LC_ALL C.UTF-8
COPY ./entrypoint.sh /sbin/entrypoint.sh
VOLUME ["/var/log","${APP_HOME}"]
ENTRYPOINT ["/sbin/entrypoint.sh"]
CMD ["app:start"]
这是我们实际项目的一个Dockerfile(有删减).
把需要安装的Python库名字,放到一个python3_pkg.txt文件里面
例如:
arrow
pycrypto==2.6.1
aliyun-python-sdk-core-v3
tornado
然后,可以把你运行的Python代码影射进去,这样就得到一个带有库的通用Python环境,这个Docker 容器可以在Linux、MacOSX、Windows下得到一样的运行环境。直接分发,打包好了,不在需要用户安装任何东西,除了Docker。目前我们自己写的Python都是这样部署的,客户只要安装了Docker,其他都不用做了。
方案2:用cython,可以把你的代码编译成一个linux下面的可执行文件,可以把第三方库都打包进去,最后只有一个文件,类似windows上面的EXE, 唯一需要依赖的是Python的so.如:libpython3.6m.so. 具体怎么做搜cython吧。很容易使用。
方案1和方案2还可以结合使用,我们实际项目里是这样的,既解决了打包问题还一定程度上加密了代码。