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

Python Enthink Canopy:os.environ变量来自哪里?,python,environment-variables,osx-mountain-lion,enthought,canopy,Python,Environment Variables,Osx Mountain Lion,Enthought,Canopy,我有以下问题。我想使用matplotlib软件包动画来保存mp4视频文件。save函数依赖于生成mp4文件,即ffmpeg外部库。所以我通过Macports在MacOSX 10.8上安装了ffmpeg,它安装在/opt/local/bin中 但是现在,在canopy中运行脚本时,解释器(iPythonShell)无法看到ffmpeg。我将路径添加到.bash_配置文件中,可以在终端上运行该程序,但当我键入os.environ['path']时,shell的实际路径没有添加,并且/opt/loca

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

但是现在,在canopy中运行脚本时,解释器(iPythonShell)无法看到ffmpeg。我将路径添加到.bash_配置文件中,可以在终端上运行该程序,但当我键入
os.environ['path']
时,shell的实际
路径没有添加,并且
/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在启动时看到的环境变量?有人有同样的问题吗?

谢谢

这里的问题与热情无关;这是因为当您从Finder、LaunchDaemon等启动东西时,OSX不会运行bash,因此不会访问您的
.bash\u配置文件。相反,它从
launchd
运行它们

如果要添加一些环境变量以影响当前用户通过
launchd
运行的任何内容,这很简单:

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

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

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

如果有用的话:手动使用
launchctl
,编辑
~/.launchd.conf
,编辑
/etc/launchd.conf
,大致相当于
导出
~/.bash\u配置文件
/etc/profile
(当然它们影响的是
launchd
,而不是
bash

有关详细信息,请参见手册页,或者只需键入
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
再次是答案。

非常清晰的解释,谢谢。本文链接到:@JonathanMarch:谢谢。但我不确定是否建议编辑
/etc/launchd.conf
,除非您希望它影响所有用户。是否确实要修改根用户运行的服务所使用的路径?如果没有,只需
edit~/.launchd.conf
而不是
sudo edit/etc/launchd.conf
。根据
launchd.conf
的手册页,实际上,
$HOME/.launchd.conf
当前不受支持。