2

次の問題があります。matplotlib パッケージのアニメーションを使用して、mp4 ビデオ ファイルを保存したいと考えていました。保存機能には、mp4 ファイルを生成するための依存関係、ffmpeg 外部ライブラリがあります。そこで、Macports 経由で Mac osx 10.8 に ffmpeg をインストールしました/opt/local/bin

しかし今、キャノピーでスクリプトを実行すると、インタープリター (ipython シェル) は ffmpeg を認識できません。.bash_profile へのパスを追加し、端末でプログラムを実行できますが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)

問題を解決するためのアイデアはありますか? Python が起動時に認識する環境変数を変更するには、どうすればよいですか? 誰かが同じ問題を抱えていましたか?
ありがとう。

4

1 に答える 1

7

ここでの問題は、エンソートとは何の関係もありません。Finder、LaunchDaemons などから何かを起動すると、OS X は bash を実行しないため、.bash_profile. 代わりに、から実行しますlaunchd

いくつかの環境変数を追加して、現在のユーザーが実行するものに影響を与えたい場合launchd、それは簡単です:

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

ログインするたびにこれを実行したい場合は、ファイルを作成すると、起動するたび~/.launchd.confにそのファイル内のサブコマンドが実行されます (これは、新しいユーザー セッションにログインする最初のステップです)。launchctllaunchd

ユーザーだけでなく、システム全体に適用したい場合は、sudolaunchctl および/または create/edit を実行できます/etc/launchd.confrootただし、自分が何をしているのかを本当に理解している場合を除き、サービスなどで使用される環境を変更したくないことはほぼ確実です。

役立つ場合:launchctl手動で使用すると、 edit ~/.launchd.conf、および editは、 、、および(もちろん、/ではなく影響することを除いて) と/etc/launchd.confほぼ同等です。export~/.bash_profile/etc/profilelaunchdbashsh

詳細については、launchctl(1)man ページを参照するか、入力launchctlして対話型セッションを開始し、組み込みのヘルプを使用してください。( ページlaunchd(8)と にlaunchd.conf(5)も役立つ情報があります。)

非推奨のenvironment.plistファイルを使用して、で実行されていないものにも影響を与えることもできますlaunchdが、それは非推奨であり、(はるかに) 古いバージョンの OS X を除いて、気にするような影響はありません。


他の Unix システムから来た人々は、しばしばこれに巻き込まれます。ほとんどのファイル マネージャは、シェルにプログラムを実行するように要求します。Finder.app (およびコマンド ライン ツールopen、AppleScript 環境など)launchdがそれを要求します。さらに、ほとんどの X11 システムでは、ファイル マネージャーからプロセス ツリーを検索すると、最終的にはユーザー シェルによっても起動されましたが、OS X では、Finder.app は によってlaunchd起動され、システム全体の によって起動されましたlaunchd。シェルは見えません。

これは、リソース制限やデフォルトの umask の変更などの他のシェル固有のものは、Mac のシェルの外部で開始されたプログラムに影響を与えないことも意味します。launchctlがまた答えです。

于 2013-09-18T22:25:30.257 に答える