我有以下问题。我想使用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在启动时看到的环境变量?有没有人有同样的问题?
谢谢。
答案 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
即可启动交互式会话并使用内置帮助。 (页面sh
和launchctl
也有有用的信息。)
您还可以使用已弃用的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
再次成为答案。