Enthought Canopy:os.environ变量来自哪里?

时间:2013-09-18 22:09:55

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

我有以下问题。我想使用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在启动时看到的环境变量?有没有人有同样的问题?
谢谢。

1 个答案:

答案 0 :(得分:7)

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

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

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

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

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

如果有帮助:手动使用launchctl,修改~/.launchd.conf和修改/etc/launchd.conf大致相当于export~/.bash_profile和{{1} (当然,它们会影响{​​{1}}而不是/etc/profile / launchd)。

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

您还可以使用已弃用的launchd(8)文件来影响launchd.conf(5)未运行的内容,但是......已弃用,并且确实没有任何内容可以影响您关注的内容关于,(很多)旧版本的OS X除外。


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

这也意味着其他特定于shell的内容(如更改资源限制或默认umask)不会影响在Mac上从shell外部启动的程序。 launchd再次成为答案。