I've been trying to set up a script to run a python program at regular intervals using launchd
. The python program fails because it can't find my imports---I know this because I caught the errors in a log file. To fix this problem, I created ~\.MacOSX\environment.plist
, and duplicated my PYTHONPATH
there, logged out and logged in again. This seems to be insufficient to solve the problem, and I'm at a loss as to what else to try.
I'm running OSX, 10.8.3.
Related threads:
UPDATE:
It appears that I can run the following command:
launchctl setenv PYTHONPATH $PYTHONPATH
and the script will execute successfully. So, to modify my question:
~\.launchd.conf
and \etc\.launchd.conf
, neither existed.launchd
will find it?To set the environment of a specific job you should use the EnvironmentVariables
key in the job definition itself:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.example.app</string>
<key>Program</key>
<string>/path/to/your/script</string>
<key>EnvironmentVariables</key>
<dict>
<key>PYTHONPATH</key>
<string>/your/python/path</string>
</dict>
</dict>
</plist>
You may define default environment variables for launchd(8)
services by editing /etc/launchd.conf
for daemons or /etc/launchd-user.conf
for agents. The latter one works but is not documented. The currently documented (but unsupported) per-user config file is $HOME/.launchd.conf
.
These config files contain a list of launchctl(1)
subcommands. The one you want is:
setenv PYTHONPATH /your/python/path
Update: /etc/launchd.conf
is not supported in Mac OS X 10.10 and higher. On these systems you'll have to define environment variables on a per-job-basis.