2012-01-14 51 views
3

我的Cocoa應用需要使用easy_install將Python命令行工具安裝在用戶的系統上。理想情況下,我想要捆綁一個bash文件與我的應用程序,然後我可以運行。但據我所知這是不可能的,因爲軟件包安裝在Python的「site-packages」目錄中。使用easy_install在可可應用中捆綁python工具

有沒有辦法創建這些文件的「包」? 如果不是,我應該如何運行easy_install安裝?我想將一個.pkg文件與我的應用捆綁在一起,然後可以在必要時打開該應用,但我無法讓此安裝包僅運行腳本。

如果您有關於如何解決這個問題的想法,我會很高興。

親切的問候, 費邊

+0

你可以在你的應用程序中運行命令行工具嗎?誰將使用命令行工具:僅適用於您的應用程序,或可能由用戶自己使用? – EOL 2012-01-14 10:54:31

+0

只有應用程序本身。 – 2012-01-14 11:26:24

回答

4

如果你可以運送你的應用程序的命令行工具,如果只您的應用程序將使用它(而不是工具被用戶直接使用),可以直接在您的應用程序中包含並使用命令行工具,如下所示:

  • 將命令行工具存儲在應用程序目錄的某處。
  • 設置Python模塊搜索路徑,以便它查找您需要的模塊。

設置相對於Python程序的Python模塊搜索路徑可以

import sys 
import os.path as path 

sys.path.append(path.join(path.dirname(__file__), 
    '<relative path between this program and the command line tool module>')) 

import <command line tool module> 

的相對路徑可以與..父目錄約定寫入來完成:這部作品在Unix(包括Mac OS X)和Windows。

PS:如果許多程序需要訪問命令行工具模塊,您可以:

  • 要麼把上面的代碼中的每個節目,

  • ,或者,如果你想要更容易維護,您可以創建自己的模塊my_runner並將其用作代理:您的模塊my_runner將導入所有原始runner函數,如下所示:

    import sys 
    import os.path as path 
    
    sys.path.append(path.join(path.dirname(__file__), 
        '<relative path between this program and the original ino module>')) 
    
    from ino.runner import * 
    

    那麼您可以通過代理服務器使用的所有程序的原始亞軍模塊,只需做你自己my_runner模塊的「正常」進口:

    from my_runner import main 
    

PPS:如果您想要一個更健壯的路徑,即使工作目錄稍後發生更改也能正常工作,那就是possi ble將潛在的本地路徑轉換爲絕對路徑:path.join(path.abspath(path.dirname(__file__)),…

+0

我認爲這就是我需要的。只是澄清一下:我需要在哪裏更改導入路徑?我有大約10個.py文件和一個帶有此導入語句的命令行界面:「ino.runner import main」我需要更改哪些內容?非常感謝你! – 2012-01-14 11:25:26

+0

還有一些依賴關係,我需要隨應用程序一起提供。你描述的同樣的事情也在這裏工作嗎?如果它可以幫助你,python工具可以在這裏下載:http://pypi.python.org/packages/source/i/ino/ino-0.3.1.tar.gz#md5=ed26bba45c71528f7efd3b0998caafaa – 2012-01-14 11:41:53

+0

感謝您的反饋。我添加了一個PS,爲您提供了一個易於維護的解決方案。 – EOL 2012-01-14 11:51:41

2

感謝EOL我現在工作了。該解決方案涉及以下幾個步驟。

  1. 刪除依賴通過包裝.egg文件,並引用他們是這樣的:

    import sys 
    import os.path as path 
    sys.path.append(path.join(path.dirname(__file__), '<relative path to .egg file>')) 
    
    from dependency import something 
    
  2. 構建從現在獨立Python模塊使用setup.py

  3. 參考產生的.egg文件中的單個.egg文件在命令行工具中就像在1.
  4. 捆綁單個.egg文件和Cocoa應用程序中的命令行工具

我希望這會對某人有用。

相關問題