我想从我的Python项目中创建一个可执行文件.用户应该能够在不需要安装Python的情况下下载并运行它.如果我只是分发一个包,我可以使用pip,wheel和PyPI来构建和分发它,但这需要用户拥有Python并知道如何安装包.我可以用什么来构建Python项目中的自包含可执行文件?
我有一个Python2.6程序,可以使用Cython加载编译为.so文件的Python模块.我用Cython将.py模块编译成.so文件,一切正常.
这是我在Cython中使用的setup.py文件:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension("ldap", ["ldap.pyx"]),
Extension("checker", ["checker.pyx"]),
Extension("finder", ["finder.pyx"]),
Extension("utils", ["utils.pyx"]),
]
setup(
name = 'bchecker',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
Run Code Online (Sandbox Code Playgroud)
所以我知道我可以使用Cython编译Python模块(我猜Cython从我的Python文件创建'C'文件然后编译它们),但是我可以将我的主Python程序编译成可以在Linux平台上执行的程序吗?如果是这样,将欣赏Cython命令行示例.谢谢.
一直在玩cython.通常用Python编程,但在前一生中使用过C. 我无法弄清楚如何制作一个独立的可执行文件.
我已经下载了cython,我可以创建一个.pyx文件(这只是一个扩展名为.pyx的普通Python文件),它在Python shell中执行,使用:import pyximport; pyximport.install()
我可以在命令行生成一个.c文件:cython file.pyx我可以通过构建标准的setup.py来生成一个.so文件并执行:
setup.py build_ext --inplace
Run Code Online (Sandbox Code Playgroud)
我尝试使用带有各种选项的gcc从.so文件中创建一个可执行文件,但总是有大量丢失的文件,标题等.尝试过从几乎所有地方指向标题,但没有成功,并且我并不熟悉所有gcc选项的功能,或者即使我应该使用gcc.
我在这里断开了事实,我可以在Python shell中运行我的程序,但不是在命令行,(我不希望用户必须进入shell,导入模块等).
我在这里错过了什么?
我对python有一些疑问
为什么没有python编译器来创建本机代码?我找到了py2exe等,但他们只是打包python解释器,因此,它再次是执行代码的解释器.
难道不可能像LISP编译器那样创建python编译器,因此代码执行速度更快(与C++相比)?
谢谢,Vinay
我有一个包含大量C++和Python/Cython文件的项目.到目前为止,我主要开发了C++部分并使用qmake将其编译为静态库.一些方法用boost :: python公开,并从.py文件执行.
我现在想把整个事情编译成一个独立的可执行文件.
我现在的问题是:最好的方法是什么?我试图切换到Cython,编译python文件并链接库.但似乎没有直接的方法使用distutils/setup.py来编译可执行文件,只有共享库.
有没有办法轻松地将.cpp和.pyx文件一次性编译成可执行文件?
这样我就可以摆脱很多boost :: python包装器并获得c ++/python的简洁组合,而无需导入共享库并使用pyinstaller打包整个东西?
from distutils.core import setup
import py2exe, sys, os
sys.argv.append('py2exe')
setup(
options = {'py2exe': {'bundle_files': 1}},
windows = [{'script': "single.py"}],
zipfile = None,
)
Run Code Online (Sandbox Code Playgroud)
在这个py2exe的安装文件中,它说single.py是我放置程序名称的地方?
一旦我使用Cython生成C文件,如何使用Visual C++ 2010编译器来生成EXE?
我试过了
cython.py Temp.py
cl.exe /MD /I "%ProgramFiles%\Python 2.6\include" Temp.c /link
/LibPath:"%ProgramFiles%\Python 2.6\libs"
Run Code Online (Sandbox Code Playgroud)
但它说
LINK : fatal error LNK1561: entry point must be defined
Run Code Online (Sandbox Code Playgroud)
如果我将/MD选项更改为/MTthenTemp.c
LIBCMT.lib(crt0.obj) : error LNK2019:
unresolved external symbol main referenced in function __tmainCRTStartup
Run Code Online (Sandbox Code Playgroud) python ×6
cython ×4
compilation ×2
c++ ×1
exe ×1
executable ×1
packages ×1
packaging ×1
py2exe ×1
python-2.6 ×1