Call Python code from an existing project written in Swift

Question:

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 found is for Objective-C.

Asked By: Shaun

||

Answers:

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

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

Answered By: Shaun

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.

Answered By: hauntsaninja

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)
Answered By: Max Rogers

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())")
Answered By: Alex Shoshiashvili
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.