【问题标题】:Enthought Canopy: Where do os.environ variables come from?Enthought Canopy:os.environ 变量从何而来?
【发布时间】:2013-09-23 20:38:53
【问题描述】:

我有以下问题。我想使用 matplotlib 包动画来保存一个 mp4 视频文件。 save 函数依赖于生成 mp4 文件,即 ffmpeg 外部库。所以我通过 Macports 在 Mac osx 10.8 上安装了 ffmpeg,它安装在 /opt/local/bin 中。

但是现在,在 canopy 中运行脚本,解释器(ipython shell)看不到 ffmpeg。我添加了.bash_profile 的路径,我可以在终端上运行程序,但是当我输入os.environ['PATH'] 时,我的shell 的实际PATH 没有添加,/opt/local/bin 不存在。 如果我尝试运行脚本,我会收到此错误:

/Users/alejandrodelacallenegro/Library/Enthought/Canopy_64bit/User/lib/python2.7/site-      packages/matplotlib/animation.py:695: UserWarning: MovieWriter ffmpeg unavailable
warnings.warn("MovieWriter %s unavailable" % writer)

有解决问题的想法吗?我必须做些什么来更改 python 在启动时看到的环境变量?有人遇到同样的问题吗?
谢谢。

【问题讨论】:

    标签: python environment-variables osx-mountain-lion enthought canopy


    【解决方案1】:

    这里的问题与Enthought无关;当您从 Finder、LaunchDaemons 等启动东西时,OS X 不会运行 bash,因此无法访问您的 .bash_profile。相反,它从launchd 运行它们。

    如果你想添加一些环境变量来影响launchd为当前用户运行的任何东西,这很简单:

    launchctl setenv PATH $PATH:/opt/local/bin
    

    如果您希望每次登录时都发生这种情况,如果您创建一个文件~/.launchd.conf,则该文件中的子命令将在每次launchd 启动时通过launchctl 运行(这是登录的第一步在新的用户会话中)。

    如果您希望它是系统范围的,而不仅仅是您的用户,您可以sudolaunchctl 和/或创建/编辑/etc/launchd.conf。但是,您几乎肯定不想更改root 服务等使用的环境,除非您真的知道自己在做什么。

    如果有帮助:手动使用launchctl、编辑~/.launchd.conf和编辑/etc/launchd.conf大致相当于export~/.bash_profile/etc/profile(当然除了它们会影响launchd而不是比bash/sh)。

    有关详细信息,请参阅 launchctl(1) 手册页,或者只需键入 launchctl 以启动交互式会话并使用内置帮助。 (页面launchd(8)launchd.conf(5) 也有有用的信息。)

    您也可以使用已弃用的 environment.plist 文件来影响不是由 launchd 运行的东西,但是……这已被弃用,并且实际上没有任何东西可以影响您关心的内容,除了(很多)旧版本的 OS X。


    来自其他 Unix 系统的人经常被这个问题所吸引。大多数文件管理器要求 shell 为它们运行程序。 Finder.app(以及命令行工具open,以及AppleScript 环境等)请launchd 执行此操作。另外,在大多数 X11 系统上,如果您从文件管理器中查找进程树,它最终也是由用户 shell 启动的,而在 OS X 上,Finder.app 由系统启动的launchd 启动-宽launchd;看不到贝壳。

    这也意味着其他特定于 shell 的内容(例如更改资源限制或默认 umask)不会影响在 Mac 上在 shell 之外启动的程序。 launchctl 又是答案。

    【讨论】:

    • 解释清楚,谢谢。本文链接到它:support.enthought.com/entries/…
    • @JonathanMarch:谢谢。但我不确定我是否建议编辑/etc/launchd.conf,除非您希望它影响所有用户。您真的要修改用于由 root 运行的服务的 PATH 吗?如果没有,只需edit ~/.launchd.conf 而不是sudo edit /etc/launchd.conf
    • 实际上,根据launchd.conf 的手册页,$HOME/.launchd.conf“当前不受支持”。
    猜你喜欢
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 2011-09-21
    • 1970-01-01
    • 2017-09-04
    • 1970-01-01
    相关资源
    最近更新 更多