我想出了一種方法,似乎工作得很好。
首先,從official website下載您想要使用的python版本的源代碼。在某處解壓檔案。我正在使用Python 3.4.2。根據您使用的特定版本調整系統上的命令。
創建一個您將用於此開發python版本的構建目錄。整個目錄中應該沒有空格,以確保bash正確解釋she-bang(#!)行。我用/Users/myaccount/development/python/devbuild/python3.4.2
。
走進提取Python的目錄,然後運行以下命令:
./configure --prefix="/Users/myaccount/development/python/devbuild/python3.4.2"
make
make install
這將在開發版本目錄中安裝蟒蛇。安裝Python路徑使用正確的目錄:
export PYTHONPATH="/Users/myaccount/development/python/devbuild/python3.4.2/lib/python3.4/site-packages/"
進入到Python bin目錄(/Users/myaccount/development/python/devbuild/python3.4.2/bin
),並使用pip3
沒有安裝所需的任何模塊。 $PYTHONPATH
設置將確保模塊安裝到正確的site-packages
目錄中。
爲PyObjC存儲庫找到一個方便的家,並在那裏克隆它。然後簽了最新版本的標籤和安裝,確保您的$PYTHONPATH
仍然是正確的:
hg clone https://bitbucket.org/ronaldoussoren/pyobjc
cd pyobjc
hg tags
hg checkout [the id of the latest version from the tag list]
/Users/myaccount/development/python/devbuild/python3.4.2/bin/python3 ./install.py
每當你需要更新Python模塊,只需確保使用正確的蟒蛇bin和$PYTHONPATH
。
現在將python添加到Xcode項目。
將/Users/myaccount/development/python/devbuild/python3.4.2
目錄拖入Xcode項目,將其設置爲不根據需要複製項目,並創建文件夾引用。
將/Users/myaccount/development/python/devbuild/python3.4.2/include/python3.4m
添加到Header Search Paths
設置在Xcode項目的Build Settings
。不知道是否有辦法做到這一點,只是搜索我們剛剛添加的文件夾引用目錄的一般步驟。
將`/Users/myaccount/development/python/devbuild/python3.4.2/lib/libpython3.4m.a庫拖放到Xcode項目中,將其設置爲添加爲引用而不復制。
現在可以使用Big Nerd Ranch scripting tutorial repository的代碼進行一些修改。
插件管理代碼需要一個NSString擴展與wchar_t
字符串Python的API似乎工作,非常喜歡:
@interface NSString (WcharEncodedString)
- (wchar_t*) getWideString;
@end
@implementation NSString (WcharEncodedString)
- (wchar_t*) getWideString {
const char* tmp = [self cStringUsingEncoding:NSUTF8StringEncoding];
unsigned long buflen = strlen(tmp) + 1;
wchar_t* buffer = malloc(buflen * sizeof(wchar_t));
mbstowcs(buffer, tmp, buflen);
return buffer;
}
@end
Python的頭應該包括以下幾個方面:
#include "Python.h"
爲了設置正確的python可執行文件PYTHONPATH和PYTHONHOME,在調用Py_Initialize()
之前需要運行以下代碼,如Zorg在其他問題中所建議的那樣。
NSString* executablePath = [[NSBundle mainBundle] pathForResource:@"python3.4" ofType:nil inDirectory:@"python3.4.2/bin"];
Py_SetProgramName([executablePath getWideString]);
NSString* pythonDirectory = [[NSBundle mainBundle] pathForResource:@"python3.4" ofType:nil inDirectory:@"python3.4.2/lib"];
Py_SetPath([pythonDirectory getWideString]);
Py_SetPythonHome([pythonDirectory getWideString]);
最後,蟒蛇路徑需要在PluginExecutor.py
文件將擴大到包括高級別lib
路徑的各個子目錄。下面的代碼添加到插件執行人文件的頂部:
import sys
from os import walk
path = sys.path.copy()
for p in path:
for root,dirs,files in walk(p):
if p is not root:
sys.path.append(root)
如果事情開始打破我會發布更新,但是這似乎是一個可行的解決方案現在。
鏈接到OS X附帶的Python框架有什麼問題? – mipadi 2014-10-30 18:13:51
隨OS X附帶的Python框架運行python2.7。我寧願使用python3。另外,我將如何將非標準模塊合併到插件中?不希望只安裝系統範圍的python模塊來安裝原生的Cocoa應用程序。 – 2014-11-01 11:27:38