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
aurora1625
V2EX  ›  Python

Python 实现功能打包成 Java 可运行的 binary,该如何做呢?

  •  
  •   aurora1625 · 2017-07-13 22:38:00 +08:00 · 3738 次点击
    这是一个创建于 2671 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大家好,有一个问题请教大家。

    目前在做一个项目中用到了很多自然语言处理相关的算法,用 Python 开发。开发好了之后要交给业务部门和目前已有的基于 Java 的系统集成。老板说不想把 Python 源代码交给业务部门,想做成一个 Java 可执行的 binary file。

    我只有 Python 开发经验,没有 Java 开发经验。想请教大家,想要达到这个目的,需要选用什么样的技术呢?

    顺便说一下,因为在公司的严密网络环境中,无法使用 Docker 等容器。

    谢谢大家!

    15 条回复    2017-07-18 11:46:02 +08:00
    janxin
        1
    janxin  
       2017-07-13 22:40:39 +08:00
    不能,要是没有第三方库,要么自己 cython 成 C ?
    est
        2
    est  
       2017-07-13 22:41:47 +08:00
    Jython 可行。。。LZ 只需要移植所有 NLTK 什么的库到 Jython 就搞定了。是不是很简单。
    est
        3
    est  
       2017-07-13 22:42:12 +08:00
    另外,公司内部集成,可以上闹得最响的 microservice 架构。
    aurora1625
        4
    aurora1625  
    OP
       2017-07-13 22:47:50 +08:00
    @est 哦,除了 NLTK 还用到了 scikit.learn,也就是说还要移植 scikit.learn 到 Jython ?
    hand515
        5
    hand515  
       2017-07-13 22:53:42 +08:00
    RPC。。。。
    v2dead
        6
    v2dead  
       2017-07-13 22:55:50 +08:00 via Android
    可以用 jni 调用,你用 C 封装个 py 的启动器,包装成 so 库应该不难。之前有一次我打包我的小工具给同事用,用了几个打包的都不好用,直到一气之下找了篇文章,自己用 vs 写了个启动器,再把 pyc 还是 pyo 放进去就可以了。
    话说你们不能用其他的 rpc 方式么,什么 restful,thrift,还有 java 最喜欢的什么 webservice
    ldbC5uTBj11yaeh5
        7
    ldbC5uTBj11yaeh5  
       2017-07-13 23:00:28 +08:00   ❤️ 3
    楼主太实诚了,二楼在婊你,不要相信他。。。

    你可以用 execnet 暴露你的接口,然后用 czfreeze 把你的程序打包。最后用 execnet in jython 来调用即可。
    v2dead
        8
    v2dead  
       2017-07-13 23:01:17 +08:00 via Android
    对了,刚翻到个 py4j 的项目,自己找吧。
    aurora1625
        9
    aurora1625  
    OP
       2017-07-13 23:05:22 +08:00   ❤️ 1
    @jigloo 谢谢!我刚刚毕业,没有开发经验,你说的我都不懂,我都去查,谢谢!
    ldbC5uTBj11yaeh5
        10
    ldbC5uTBj11yaeh5  
       2017-07-13 23:16:19 +08:00   ❤️ 2
    刚毕业的话,那别搞这些酷炫的东东了。老老实实用 rpc 吧。推荐用 python xmlrpclib 标准库,这样 java 作为调用方也调的比较爽。
    aurora1625
        11
    aurora1625  
    OP
       2017-07-13 23:18:36 +08:00
    @jigloo 好的,非常感谢,我继续研究!
    Cooky
        12
    Cooky  
       2017-07-14 08:28:51 +08:00 via Android
    Python 有解释器的 api 吧
    Cloudee
        13
    Cloudee  
       2017-07-14 09:01:10 +08:00 via iPhone
    我也觉得封装成 webservice 给业务调用比较好,这样他们连 binary 都没有(这怎么防自己人跟防贼一样...)
    stormpeach
        14
    stormpeach  
       2017-07-14 10:27:40 +08:00
    用 cpp 重写一遍啊,性能也提升了。。。
    yylucifer
        15
    yylucifer  
       2017-07-18 11:46:02 +08:00
    直接打包成 jar 包,做下代码混淆,内部用可以了。你们老板只是说不给源代码,是没给呀。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3078 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 13:43 · PVG 21:43 · LAX 05:43 · JFK 08:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.