首页 > 解决方案 > XCode/Swift 和 Python 文件 - 想要在 XCode 项目中嵌入 Python.py 文件

问题描述

我想创建一个使用PythonKit调用一些嵌入式 Python.py 文件的 Swift 应用程序。

在文档和示例文件中,它说我应该使用

let sys = Python.import("sys")
sys.path.append("/Users/mlboy/PythonTest/") // path to your Python file's directory.

当我使用自己的路径执行此操作时,此路径是硬编码的并且有效。

但是,当它们位于同一项目目录中时,如何从项目中相对地访问这些文件,所以我不需要任何硬编码文件。

我以为这很容易,所以我确实尝试了......

sys.path.append("./myPythonFiles/")
sys.path.append("./pythonTest/myPythonFiles/")

还有更多。但没有一个工作。经过一番谷歌搜索后,我找不到解决方案。

建议?

谢谢你。

标签: pythonswiftxcode

解决方案


我花了一周的时间来为我的类似需求想出一个解决方案。我正在制作一个命令行工具,但我想将(唯一的)Python 代码与它捆绑在一起。我还想在 Xcode 中进行调试,而不是在大多数情况下从与调试器断开连接的命令行部署和运行。因此,我的命令行工具初始化了一个主结构(BpK),该结构初始化了另一个执行 Python 调用的结构 PyRunner(首先声明为静态 var bpPy:PyRunner!= nil)。我的实验字符串仍然包括在内,因为这是 WIP。我希望它会演变成更优雅的东西。

public init() {
    let bundlePyURL = Bundle.main.url(forResource: "Python/.../sample", withExtension: "py") ??
        Bundle.module.url(forResource: "Python/.../sample", withExtension: "py")
    BpK.bpPy = PyRunner(libDirPath: undlePyURL!.deletingLastPathComponent().path)
}

然后在亚军

`sys.path.append(libDirPath)
let example = Python.import(function)`

推荐阅读