簡體   English   中英

在macos中由launchctl腳本觸發時無法導入Python模塊

[英]Python module can't be imported when triggered by launchctl script in macos

想要由launchctl腳本觸發的python程序(apple.py),在python2.7下用anaconda編寫

用於觸發python程序的launchctl plist腳本(com.tushare.refreshall.plist)

我嘗試使用 plist 腳本來啟動我的 python 程序,但沒有成功,在程序中,我導入了一個包 tushare,但是在日志文件“stderr”中返回了“ImportError: No module named tushare”,這個包可以成功導入用anaconda編寫的python程序。

結果:

Traceback (most recent call last):

  File "/Users/jacksonshawn/PythonCodes/apple.py", line 8, in <module>
import tushare as ts

ImportError: No module named tushare

猜猜可能是由於 plist 腳本中缺少“EnvironmentVariables”參數,但我不知道如何修改 plist 腳本以解決問題。每次,我都執行以下操作來執行腳本。使用 Plist 腳本檢查語法,它可以被執行。

"launchctl unload -w com.tushare.refreshall.plist"

"launchctl load -w com.tushare.refreshall.plist"

"launchctl start com.tushare.refreshall.plist"

當您登錄終端(包括 anaconda 配置)時,您使用 launchctl 啟動的服務可能不會共享您所在的環境。

您可以通過調整 plist 的ProgramArguments鍵來解決此問題,並首先通過 bash 運行您想要的任何內容,並在預期程序之前包含 conda 激活。 以下是在名為py36環境中運行 emacs 守護程序的示例:

  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-c</string>
    <string>source /Users/username/anaconda3/etc/profile.d/conda.sh; conda activate py36; /usr/local/opt/emacs/bin/emacs --fg-daemon</string>
  </array>

這假設您是username ,anaconda 安裝在/Users/username/anaconda3 根據您的具體情況進行調整,包括 conda 環境名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM