从Python脚本创建独立编译的可执行文件(使用sklearn)

从Python脚本创建独立编译的可执行文件(使用sklearn),python,linux,scikit-learn,cython,pyinstaller,Python,Linux,Scikit Learn,Cython,Pyinstaller,假设这就是代码。它接受一个CSV文件,完成它的工作,并给出一些输出。这样称呼: python test.py input.csv import numpy as np from sklearn.svm import SVC import sys filename = sys.argv[-1] val = np.genfromtxt(filename,delimiter=',') target = val[:, 4] features = val[:, [0,1,2,3]] clf = SV

假设这就是代码。它接受一个CSV文件,完成它的工作,并给出一些输出。这样称呼:

python test.py input.csv

import numpy as np
from sklearn.svm import SVC
import sys

filename = sys.argv[-1]

val = np.genfromtxt(filename,delimiter=',')
target = val[:, 4]
features = val[:, [0,1,2,3]]

clf = SVC()
clf.fit(features, target)

print clf.predict([[6.3,2.9,5.6,1.8]])
现在我想创建一个独立的可执行文件,它可以在任何机器上运行,而无需安装任何先决条件(Python2.7、numpy、sklearn等)

我使用Ubuntu 16.04上的PyInstaller创建了一个可执行文件:

pyinstaller --onefile --hidden-import sklearn.neighbors.typedefs test.py
我可以在任何Ubuntu机器上使用生成的可执行文件(大小约55 MB),无需安装任何先决条件:

./test input.csv
它提供相同的输出。 所以部分问题已经解决了。 然而,文件:

声明源代码无法保护,并建议Cython作为补救措施。我遇到了这个问题

它描述了使用--embed选项来包含Python解释器。但是如何将sklearn、numpy等嵌入Cython中,以创建一个真正独立的应用程序呢

执行过程应简单:

./test input.csv
而且源代码不应该被泄露。
我需要帮助来扩展这个问题,以嵌入外部库(sklearn、numpy等)。

将完整的程序放在一个脚本文件中是至关重要的,还是可以将脚本拆分为要隐藏的部分和调用隐藏代码的简单python脚本?为了使用pyinstaller,我们必须有一些python入口点,而cython将python代码转换成c代码pyinstaller不能从任何东西开始。编译后的程序仍将嵌入到一个文件中,您可以从命令行调用。完整的程序是否必须包含在一个脚本文件中,或者是否可以将脚本拆分为要隐藏的部分和调用该隐藏代码的简单python脚本?为了使用pyinstaller,我们必须有一些python入口点,而cython将python代码转换成c代码pyinstaller不能从任何东西开始。编译后的程序仍将嵌入到一个文件中,您可以从命令行调用该文件。