gpt4 book ai didi

python - Enthought Canopy : Where do os. 环境变量从何而来?

转载 作者:行者123 更新时间:2023-11-28 20:47:22 27 4
gpt4 key购买 nike

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

但是现在,在 canopy 中运行脚本,解释器(ipython shell)看不到 ffmpeg。我将路径添加到我的 .bash_profile,我可以在我的终端上运行该程序,但是当我键入 os.environ['PATH'] 时,我的实际 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 在启动时看到的环境变量?有没有人遇到同样的问题?
谢谢。

最佳答案

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

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

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

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

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

如果有帮助:手动使用launchctl,编辑~/.launchd.conf,编辑/etc/launchd.conf 大致等同于 export~/.bash_profile/etc/profile(当然除了它们影响 launchd而不是 bash/sh)。

参见 launchctl(1)手册页了解详细信息,或者只需键入 launchctl 即可启动交互式 session 并使用内置帮助。 (页面 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 又是答案。

关于python - Enthought Canopy : Where do os. 环境变量从何而来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18883201/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com