Enthought Canopy: os.environ变量的来源在哪里?

2024-09-25 08:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

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

但是现在,在canopy中运行脚本时,解释器(ipythonshell)看不到ffmpeg。我将路径添加到我的.bash配置文件中,我可以在终端上运行该程序,但是当我键入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在启动时看到的环境变量?有人有同样的问题吗?
谢谢。在


Tags: 文件path函数脚本binmatplotlibsavelocal
1条回答
网友
1楼 · 发布于 2024-09-25 08:30:20

这里的问题与enthough无关;它是当您从Finder、launchdaemon等启动东西时,OSX不运行bash,因此不能访问您的.bash_profile。相反,它从launchd运行它们。在

如果要添加一些环境变量来影响launchd为当前用户运行的任何内容,那么很容易:

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

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

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

如果有帮助的话:手动使用launchctl,编辑~/.launchd.conf和编辑{}大致相当于export~/.bash_profile和{}(当然,它们影响的是launchd,而不是{}/sh)。在

有关详细信息,请参见^{}手册页,或者只需键入launchctl启动交互式会话并使用内置帮助。{cd21>还有有用的页面

您还可以使用不推荐的environment.plist文件来影响launchd不运行的东西,但是……这是不推荐的,它确实没有任何东西可以影响到您关心的,除了(非常)旧的osx版本


来自其他Unix系统的人经常被这个问题所困扰。大多数文件管理器要求shell为他们运行程序;查找器.app(以及命令行工具open,以及AppleScript环境,等等)请launchd来完成。另外,在大多数X11系统上,如果从文件管理器中查找进程树,它最终也是由用户shell启动的,而在OSX上,查找器.app由launchd启动,它是由系统范围的launchd启动的;看不到shell。在

这也意味着其他shell特有的东西,如更改资源限制或默认umask,不会影响Mac上在shell之外启动的程序。launchctl又是答案。在

相关问题 更多 >