2013-12-21 172 views
15

我最近買了一臺MacBook,並通過蟒蛇在其上安裝了Python。這裏的版本信息:方式調用Python和Spyder的OSX上

Python 2.7.6 |Anaconda 1.8.0 (x86_64)| (default, Nov 11 2013, 10:49:09) 
[GCC 4.0.1 (Apple Inc. build 5493)] on darwin 

我希望能夠做所有的以下內容:

  1. 推出的Spyder而不必通過啓動應用程序(比如,通過鍵入的東西到Spotlight和水銀)從Finder
  2. 運行Python代碼,大概是通過我的.py文件雙擊或通過輸入一個Python腳本的名字進入水銀(就好像它是選擇和,然後按Cmd的-O
  3. 運行Python代碼一個正規計劃)

這是我已經試過:

  1. (算不得什麼。這裏沒有想法)
  2. 我相關的.py文件與/Users/kuzzooroo/anaconda/python.app/Contents/MacOS/python,讓他們運行(chmod U + X)。當我嘗試運行應用程序從未啓動,我沒有得到一個錯誤信息(不知道去哪裏找)
  3. 作出的可執行文件,並試圖從聚光燈運行它們。與#2結果相同。

這是我可以做:

  • 從終端窗口中運行我的代碼,如果我有在頂部的右側家當,並取得了該文件的可執行
  • 使用py2app生成應用程序。不幸的是,這種方法存在以下缺點:
    • 我經常修改我的腳本和不希望有我每次即使是一個簡單的腳本生成的應用程序是7 MB
    • 運行做
    • 時間運行py2app在某些情況下我的應用已經挖周圍的包找到實際的「Unix可執行文件」,然後運行,而不是

一旦我有這個工作,我有興趣做以下幾點:
A.控制哪些腳本在運行時創建控制檯窗口,哪些不是
B.控制當腳本完成或等待用戶(我)關閉它時,生成的控制檯窗口是否消失
但是,我懷疑一旦我弄清楚我將如何調用我的腳本,可能很容易弄清楚如何做到這些(或者是否有可能)。

+0

如果你.py文件與/用戶/ kuzzooroo /蟒蛇/ Python的關聯。應用程序(沒有挖掘到內容)? – asmeurer

+0

@asmeurer,當我將.py文件與/Users/kuzzooroo/anaconda/python.app關聯起來時,我可以看到一些跡象表明腳本正在嘗試運行,但它並未起飛。碼頭上的圖標開始移動以騰出空間。但在他們完全分開之前,這個過程似乎失敗了,碼頭上的圖標又縮回到位。不幸的是,我不知道在哪裏尋找錯誤消息,所以我不知道如何調試它。 – kuzzooroo

+0

您也可以在Mac堆棧交換中找到此問題的答案。 – asmeurer

回答

49

爲了使Spyder的可調用從Spotlight或Finder中:

  1. 尋找您Spyder的可執行文件是在終端運行:

    which spyder 
    

    這應該產生~/anaconda/bin/spyder如果您通過蟒蛇安裝Spyder的,/opt/local/bin/spyder如果你使用MacPorts或類似的東西。

  2. Applications目錄中創建一個名爲spyder的文件並使其可執行。然後,與前一個命令的輸出,隨後&; exit填充: - >首選項 - >概況 -

    touch /Applications/spyder 
    chmod +x /Applications/spyder 
    echo -e '#!/bin/bash'"\n~/anaconda/bin/spyder &\nexit" >> /Applications/spyder 
    
  3. 在終端> 「默認配置」 - >殼 - >當shell退出:選擇「關閉如果外殼乾淨地退出」

可選:

  • here下載spyder的圖標在預覽打開它。按cmd + C複製其內容。

  • 在Finder中,找到/Applications/spyder並通過點擊cmd + I打開其「Get Info」窗格。用鼠標選擇左上角的圖標,然後點擊cmd + V。

  • +1

    非常好!其他bash用戶請注意:我必須在腳本的頂部放置'#!/ bin/tcsh'才能使其正確運行。 – kuzzooroo

    +0

    @kuzzooroo:謝謝你的評論!我編輯了該行,以便它現在可以作爲常規bash腳本工作。 – Thomas

    +0

    @Thomas,優秀的答案。感謝您提供如此徹底的解決方案! –

    2

    可以通過指向水銀來~/anaconda/bin/spyder(你可以將其添加到您的目錄,使其總能找到它)打開的Spyder。

    +0

    謝謝。你是怎麼找到這個的?有什麼方法可以配置Spotlight,以便在我搜索「spyder」時顯示出來? – kuzzooroo

    +0

    那麼,帶有可執行腳本的Python包總是會將它們的腳本安裝到〜/ anaconda/bin中。根據http://apple.stackexchange.com/questions/55116/how-do-i-add-folders-to-spotlight-search-priority,您無法將文件夾明確添加到Spotlight。正如該線程的評論者所指出的那樣,Spotlight具有相當的限制性,我當然會推薦使用Quicksilver或Alfred。 –

    +2

    水銀似乎已經凍結在我身上,我終於意識到(經過了很長時間),運行Spyder是其原因。 Quicksilver啓動Spyder作爲shell命令,等待它完成之後(Quicksilver)將不會響應任何更多輸入。我寫了一個運行'〜/ anaconda/bin/spyder>/dev/null 2>&1&'的bash腳本,而我從Quicksilver調用該腳本。這解決了問題。 – kuzzooroo

    3

    導航到蟒蛇/ bin中,找到的Spyder(或IPython中,等等),並將其拖動到被告席上 - 但把它放在末尾的文檔部分。然後你就可以很方便地訪問它,當你點擊它的Mac OS X將啓動運行它的殼,它會出現在應用部分,這樣就可以通過點擊它帶來運行的應用向前發展。

    3

    您可以使用Automator創建一個將運行Unix腳本的應用程序。打開Automator時,要求輸入文檔類型「應用程序」

    搜索並單擊「運行Shell腳本」。您可以保留/ bin/bash,並在框中鍵入spyder的位置(通過在終端中鍵入哪個spyder給出)。然後你保存文件,你就完成了。這也擺脫了我在終端在後臺運行時遇到的問題,併爲您提供一個應用程序,您可以拖動到停靠欄。您也可以按照上面的建議更改徽標。

    (我這樣做是與Mac OS 10.10和蟒蛇2.3.0)

    +0

    謝謝。不幸的是,這與我的解決方案具有同樣的缺點:當程序運行時,它的圖標是一個通用的Python圖標,而不是Spyder圖標,我仍然在文檔中獲得第二個shell腳本圖標。儘管如此,我認爲有些人可能更喜歡它作爲更多Apple-ish(以及更少的Unix-ish)解決方案。 – kuzzooroo

    12

    接受的答案有兩個缺點:一個控制檯窗口啓動時Spyder的出現,沒有人可以保持Spyder的圖標,在被告席上。這些drawbakcs可以通過爲spyder創建一個合適的Mac應用程序包來避免,這非常容易。

    /usr/local/bin/spyder3(的which spyder3我的機器上的結果)轉換成傳統的Mac應用程序:

    1. 創建的Mac應用程序包(基本上包含可執行文件的文件夾結構):

      cd /Applications 
      mkdir -p spyder.app/Contents/MacOS 
      echo -e '#!/bin/bash'"\n /usr/local/bin/spyder3 [email protected]" >> spyder.app/Contents/MacOS/spyder 
      chmod +x spyder.app/Contents/MacOS/spyder 
      
    2. 在內容文件夾中(即在spyder.app/Contents/Info上)創建一個名爲Info.plist的純文本文件。的plist)具有以下內容:

      <?xml version="1.0" encoding="UTF-8"?> 
      <!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd"> 
      <plist version="0.9"> 
      <dict> 
      <key>CFBundleExecutable</key> 
      <string>spyder</string> 
      <key>CFBundleInfoDictionaryVersion</key> 
      <string>3.1.4</string> 
      <key>CFBundlePackageType</key> 
      <string>APPL</string> 
      <key>CFBundleSignature</key> 
      <string>????</string> 
      <key>CFBundleVersion</key> 
      <string>3.1.4</string> 
      </dict> 
      </plist> 
      
    3. (可選)創建像在步驟4和接受的答案的5應用圖標。

    Voilà,spyder突然變得更加Mac友好!

    編輯
    人們可以進一步改善的Spyder的MAC友好:

    1. 防止一般的蟒蛇火箭圖標出現除了Spyder的圖標
      爲此,取消選中的Spyder選項工具 - >首選項 - > iPython控制檯 - >圖形 - >激活(matplotlib)

    2. 使spyder成爲默認t編輯器.py文件。
      這一個更棘手。首先確保spyder.app/Contents/MacOS/spyder的內容讀取然後

      #!/bin/bash 
      /usr/local/bin/spyder [email protected] 
      

    創建的Automator腳本方含一個動作「執行shell腳本」。在它粘貼以下(bash)的腳本:

    for f in "[email protected]" 
    do 
        open /Applications/spyder.app --args $f 
    done 
    if [ -z "$f" ]; then 
        open /Applications/spyder.app --args ~ 
    fi 
    

    選擇「作爲參數」輸入數據,如下面的屏幕截圖(以下簡稱「--args〜」中缺少的屏幕截圖,但是它需要避免在沒有任何文件的情況下啓動spyder時發生錯誤)。 automator script
    將此腳本另存爲例如名爲「SpyderOpener」的應用程序。

    讓SpyderOpener開.py文件的默認應用程序(使用Finder中「獲取信息」上的.py文件對話框)

    +0

    這很棒,除了Spyder之外,它還在Dock上運行了一個Python進程(帶有一個通用圖標)。任何想法如何阻止發生? – kuzzooroo

    +0

    @kuzzooroo:這個額外的圖標是由於matplotlib在啓動時被spyder「交互式」加載。在Spyder中,如果取消選中工具 - >首選項 - > iPython控制檯 - >圖形 - >激活(matplotlib),這個惱人的圖標不會再出現。 – topoman