假设这是代码。它接受一个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]])
现在我想创建一个独立的可执行文件,它可以在没有安装任何先决条件的任何机器上运行(Python 2.7,numpy,sklearn等)。
我在Ubuntu 16.04上使用PyInstaller创建了一个可执行文件:
pyinstaller --onefile --hidden-import sklearn.neighbors.typedefs test.py
我可以在没有安装任何先决条件的任何Ubuntu机器上使用生成的可执行文件(大小约55 MB):
./test input.csv
它提供相同的输出。 因此部分问题得以解决。 但是文档:https://pythonhosted.org/PyInstaller/operating-mode.html#hiding-the-source-code
声明源代码无法受到保护,并建议将Cython作为补救措施。我遇到了这个StackOverflow问题Cython standalone executable on ubuntu
描述了使用--embed选项来包含Python解释器。但是我如何使用Cython嵌入sklearn,numpy等来创建一个真正的独立应用程序?
执行应该简单:
./test input.csv
并且源代码不应受到损害。 我需要帮助扩展这个Cython standalone executable on ubuntu问题以嵌入外部库(sklearn,numpy等)。