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

Ale*_*oir 2 python environment-variables enthought osx-mountain-lion canopy

我有以下问题.我想使用matplotlib包动画来保存mp4视频文件.save函数具有生成mp4文件(ffmpeg外部库)的依赖项.所以我通过Macports在Mac OSx 10.8上安装了ffmpeg,并安装了它/opt/local/bin.

但现在,在canopy中运行脚本,解释器(ipython shell)无法看到ffmpeg.我添加了.bash_profile的路径,我可以在我的终端上运行程序,但是当我键入时,我的shell os.environ['PATH']的实际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)
Run Code Online (Sandbox Code Playgroud)

有什么想法来解决这个问题吗?我需要做些什么来改变python在启动时看到的环境变量?有没有人有同样的问题?
谢谢.

aba*_*ert 7

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

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

launchctl setenv PATH $PATH:/opt/local/bin
Run Code Online (Sandbox Code Playgroud)

如果您希望每次登录时都能执行此操作,则在创建文件时~/.launchd.conf,该文件中的子命令将在launchctl每次launchd启动时运行(这是登录新用户会话的第一步).

如果您希望它是系统范围的,而不仅仅是为您的用户,您可以sudo启动和/或创建/编辑/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又是答案.