V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
lovejunjie1
V2EX  ›  Python

请教一下大佬们.py 转.pyd 的方法

  •  
  •   lovejunjie1 · 2019-04-04 20:43:25 +08:00 · 3201 次点击
    这是一个创建于 2063 天前的主题,其中的信息可能已经有所发展或是发生改变。
    转 pyd 的需求主要是两点。

    1.加速已有部件的运行速度
    2.功能共享,源码保密

    目前已经了解到了 Cython 的 build 方法,目前还没跑通,因为工作原因,必须使用 2.7 的 python,在油管和谷歌上看到的大部分都是 python3 的教程。当我自己把库带入到 2.7 的时候就死活也成功不了。很受打击,有点沮丧。

    后来转到 python 开发包,用 VS2008 直接编译 pyd 扩展。这个我倒是弄明白方法了,但是效率很低,很多输入输出类型需要转换,刚好我某些组件需要提速。关键部分我愿意去重新编译。

    但是还有很多不是过于核心,但是为了代码不被恶意修改后,二次放出。需要保护的地方,这些代码要是一个一个去编译 pyd,我就死了。

    所以请教各位 V 友,如何才能跑通 Cython 批量转换 python2.7 代码的这条路呢?

    或者说还有其他的康庄大道,恳请各位 V 友指点一下

    ps:其中有使用到 pyqt4 的部分,如果 pyqt4 会影响到 Cython 批量转换的话,还请各位大大多提醒一下注意事项
    8 条回复    2019-04-07 16:42:47 +08:00
    Latin
        1
    Latin  
       2019-04-04 23:02:56 +08:00 via Android
    编译完也不一定能正常跑,目前还没有特别完善的混淆机制
    www5070504
        2
    www5070504  
       2019-04-05 09:16:14 +08:00
    如果是想保密源代码 用 pyinstaller 也可以
    beordle
        3
    beordle  
       2019-04-05 16:34:11 +08:00 via Android
    nuitka 一个一个去弄成 so/pyd 就可以了。
    NoAnyLove
        4
    NoAnyLove  
       2019-04-07 13:20:57 +08:00
    版本是硬伤啊。不负责任型推荐<http://nuitka.net/pages/overview.html>,官方描述来看完全符合你的要求,不过我没用过,不知道到底如何。
    lovejunjie1
        5
    lovejunjie1  
    OP
       2019-04-07 15:30:11 +08:00
    @www5070504 感谢建议,这个方法不适合我。工作环境是跨平台的,并且不是直接引用的,是在工作环境启动后,在内嵌的 python27 中运行的
    lovejunjie1
        6
    lovejunjie1  
    OP
       2019-04-07 15:31:47 +08:00
    @Latin emmmmm,这种事情是因为没镇住八阿哥,还是 Cgrass 的码子写好的锅呀?
    lovejunjie1
        7
    lovejunjie1  
    OP
       2019-04-07 15:32:48 +08:00
    @beordle
    @NoAnyLove
    感谢两位,我先去看看哈。不管能不能搞定我都会回来回复哒
    justou
        8
    justou  
       2019-04-07 16:42:47 +08:00
    from setuptools import setup, Extension
    from Cython.Build import cythonize

    setup(ext_modules=cythonize(['one.py','two.py'])) 列表里面放要编译成 pyd 的脚本

    python setup.py build_ext --inplace 编译
    编译器用 https://www.microsoft.com/en-us/download/details.aspx?id=44266
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 10:22 · PVG 18:22 · LAX 02:22 · JFK 05:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.