Call Python code from an existing project written in Swift

前端 未结 4 964
忘了有多久
忘了有多久 2020-11-27 17:26

I need a way to call Python code from Swift on an Apple platform. A library would be ideal. I\'ve done a considerable amount of Google searching, and the closest material I

相关标签:
4条回答
  • 2020-11-27 18:01

    In Swift 4.2 there was an approved feature to allow dynamic languages to be ported directly into swift

    https://github.com/apple/swift-evolution/blob/master/proposals/0195-dynamic-member-lookup.md

    Will look similar to:

      // import pickle
      let pickle = Python.import("pickle")
    
      // file = open(filename)
      let file = Python.open(filename)
    
      // blob = file.read()
      let blob = file.read()
    
      // result = pickle.loads(blob)
      let result = pickle.loads(blob)
    
    0 讨论(0)
  • 2020-11-27 18:05

    I found this excellent and up to date gist that walks you through a complete solution: https://github.com/ndevenish/Site-ndevenish/blob/master/_posts/2017-04-11-using-python-with-swift-3.markdown

    If you can get away with just using NSTask to launch a Python process, that's a pretty good option too.

    0 讨论(0)
  • 2020-11-27 18:05

    If anyone is ever interested in calling python from swift, here is some helpful material I found:

    • U the python framework - https://developer.apple.com/library/ios/technotes/tn2328/_index.html
    • PyObjC (a little more challenging) -
    • Cobbal - https://github.com/cobbal/python-for-iphone
    • Python docs (you would need to make C-Swift bridge)

    Most of it is for Objective-c, but if you need to use swift you can easily just create an ObjC-Swift bridge (super-super easy) - Lookup the apple docs

    0 讨论(0)
  • 2020-11-27 18:06

    In swift 5 you can try PythonKit framework.

    Here's example of the usage:

    import PythonKit
    
    let sys = try Python.import("sys")
    
    print("Python \(sys.version_info.major).\(sys.version_info.minor)")
    print("Python Version: \(sys.version)")
    print("Python Encoding: \(sys.getdefaultencoding().upper())")
    
    0 讨论(0)
提交回复
热议问题