在OSX上调用python和Spyder的方法

2024-05-18 07:53:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近买了一个MacBook,通过Anaconda在上面安装了Python。以下是版本信息:

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和Quicksilver中键入内容)
  2. 从Finder运行Python代码,可能是双击my.py文件,或者选择并按Cmd-O
  3. 通过在Quicksilver中键入Python脚本的名称来运行Python代码(就像它是一个常规程序一样)

我试过的是:

  1. (没有;这里没有想法)
  2. 我将.py文件与/Users/kuzzooroo/anaconda/python.app/Contents/MacOS/python相关联,并使它们可执行(chmod u+x)。当我试图运行应用程序时,它从不启动,也不会收到错误消息(不知道从哪里查找)
  3. 使文件可执行并尝试从Spotlight运行它们。结果与2相同。

我可以这样做:

  • 从终端窗口运行我的代码,如果我在上面有正确的shebang并使文件可执行
  • 使用py2app生成应用程序。不幸的是,这种方法有以下缺点:
    • 我经常修改脚本,不希望每次都运行py2app
    • 即使是一个简单的脚本,生成的应用程序也是7MB
    • 要在某些上下文中运行应用程序,我必须在包中查找实际的“Unix可执行文件”,然后运行它

一旦我有了这个工作,我有兴趣做以下工作:
A、 控制哪些脚本在运行时创建控制台窗口,哪些脚本不
B、 控制脚本完成时生成的控制台窗口是否消失,或等待用户(me)关闭它
然而,我怀疑,一旦我弄清楚了如何首先调用我的脚本,就很容易找出如何执行这些操作(或者是否可能)。


Tags: 文件代码py程序脚本应用程序default键入
3条回答

导航到anaconda/bin,找到spyder(或IPython等),并将其拖到码头-但将其放在文档部分的末尾。然后你就可以很容易地访问它了,当你点击它时,Mac OS X会启动一个运行它的shell,它会出现在applications部分,这样你就可以通过点击它来把正在运行的应用程序向前推进。

要使spyder可从Spotlight或Finder调用:

  1. 通过在终端中运行查找spyder可执行文件的位置:

    which spyder
    

    如果您通过Anaconda安装了spyder,这将产生~/anaconda/bin/spyder;如果您使用MacPorts或类似的东西,这将产生/opt/local/bin/spyder

  2. Applications目录中创建一个名为spyder的文件,并使其可执行。然后,用前一个命令的输出填充它,后跟一个&; exit

    touch /Applications/spyder
    chmod +x /Applications/spyder
    echo -e '#!/bin/bash'"\n~/anaconda/bin/spyder &\nexit" >> /Applications/spyder
    
  3. 在“终端”->;“首选项”->;“配置文件”->;“默认配置文件”->;“外壳”->;“外壳退出时”:选择“外壳完全退出时关闭”

可选:

  1. here下载spyder图标并在预览中打开它。点击cmd+C复制其内容。

  2. 在Finder中,找到/Applications/spyder,点击cmd+I打开其“获取信息”窗格。用鼠标选择左上角的图标,点击cmd+V。

接受的答案有两个缺点:启动spyder时会出现控制台窗口,并且无法将spyder图标保留在停靠点中。通过为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 $@" >> spyder.app/Contents/MacOS/spyder
    chmod +x spyder.app/Contents/MacOS/spyder
    
  2. 在Contents文件夹(即spyder.app/Contents/Info.plist)中创建一个名为Info.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所示。

喂,spyder突然变得对Mac更友好了!

编辑:
可以通过以下方式进一步提高spyder的mac友好性:

  1. 防止普通python火箭图标出现在spyder图标旁边
    为此,请在spyder中取消选中“工具”->;“首选项”->;“iPython控制台”->;“图形”->;“激活(matplotlib)”

  2. 使spyder成为.py文件的默认编辑器。
    这个更棘手。首先确保spyder.app/Contents/MacOS/spyder的内容为

    #!/bin/bash
    /usr/local/bin/spyder $@
    

然后创建一个包含单个操作“执行shell脚本”的自动机脚本。在其中粘贴以下(bash)脚本:

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

为输入数据选择“As argument”,如下面的屏幕截图所示(屏幕截图中缺少“--args~”,但需要避免在没有任何文件的情况下启动spyder时出错)。 automator script
例如,将此脚本另存为名为“spydropener”的应用程序。

使spydropener成为打开.py文件的默认应用程序(在.py文件上使用Finder“Get Info”对话框)

相关问题 更多 >