本例在centos7测试通过
1、首先安装pyinstaller 及Cython
pip install pyinstaller
pip installer Cython
2、本例中文件结构:
.其中config.cfg为配置文件,datacheck.py为入口文件,file_config.py、method.py为需要引入文件。
├── config.cfg
├── datacheck.py
├── file_config.py
├── method.py
3、编辑build_pyd.py文件,内容如下:
from distutils.core import setup
from Cython.Build import cythonize
setup(
name='datacheck',
ext_modules=cythonize(["method.py", "file_config.py"])
)
注意 ext_modules只填写引入文件,主运行文件不能写。
编辑后文件结构如下:
├── build_pyd.py
├── config.cfg
├── datacheck.py
├── file_config.py
├── method.py
4、生成so链接文件(如在windows则为pyd文件,未测试)
# python3 build_pyd.py build_ext --inplace
正常情况下会引入文件会生成so文件,文件结构如下:
.
├── build
│ └── temp.linux-x86_64-3.7
│ ├── file_config.o
│ └── method.o
├── build_pyd.py
├── datacheck.py
├── file_config.c
├── file_config.cpython-37m-x86_64-linux-gnu.so
├── file_config.py
├── method.c
├── method.cpython-37m-x86_64-linux-gnu.so
└── method.py
可以新建tmp目录,将datacheck.py及新生成的两个so文件拷贝,并针两个so文件 cpython-gnu去掉。tmp下文件结构如下:
├── datacheck.py
├── file_config.so
└── method.so
5、运行pyinstaller,生成二进制文件
# pythinsatller -F datacheck.py
加-F指生成单个文件。
6、修改datacheck.spec文件
在hiddenimports=加入引入的文件,如不加入,运行程序的时候会有如下提示:
Traceback (most recent call last):
File "datacheck.py", line 7, in <module>
File "file_config.py", line 1, in init file_config
ModuleNotFoundError: No module named 'method'
7、再次运行pyinstaller,生成新的二进制文件
# pyinstaller datacheck.spec
8、拷贝dist目录下的二进制文件,使用原来的cfg文件,即可单独运行。