2012-01-14 89 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应用程序中的命令行工具

我希望这会对某人有用。

相关问题