我编写了一个python脚本,如果我正常运行它(python path / to / file.py)。 我需要它每隔几个小时自动运行一次。所以我在/ Users / User / Library / LaunchAgents中创建了一个plist文件,它触发一个最终触发python脚本的.sh文件。
python脚本无法正常运行。我设法将问题缩小到模块“PyPDF2”和“reportlab”(如果我排除那些模块,脚本运行正常)。我得到的错误消息是“没有名为reportlab.pdfgen的模块”和“没有名为PyPDF2的模块”。
代码的相关部分是:
.sh脚本:
#!/bin/sh
python /Users/User/path/to/file.py
Python脚本:
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
import mechanize #pip install mechanize
import time
import os
from reportlab.pdfgen import canvas
from PyPDF2 import PdfFileWriter, PdfFileReader
同样,如果我自己运行脚本,脚本也可以运行。我的猜测是,launchctl以root身份运行,root以某种方式找不到/访问模块。我已经进行了广泛的搜索,但找不到任何东西。
我对此比较陌生,可能会遗漏一些明显的东西?
我在Mac上运行2.7版本的python脚本。
这里似乎有什么问题?
感谢您的帮助
更新: 如果我在代码中放置print(sys.path)并自己运行它以及使用触发器,我会得到一长串路径列表。其中一些是相同的,但大多数是不同的。 我也跑了
print(help("modules"))
print(help("modules reportlab"))
print(help("modules PyPDF2"))
我自己并使用触发器。虽然我自己运行模块会显示模块,但如果我使用触发器则不会。
print(reportlab.__file__)
print(PyPDF2.__file__)
给我“/usr/local/lib/python2.7/site-packages/reportlab/init.pyc”和“/usr/local/lib/python2.7/site-packages /PyPDF2/init.pyc”。 我试过跑步 sys.path.append( “/ USR /本地/ LIB / python2.7 /站点包/ PyPDF2 /的初始化 pyc文件”) sys.path.append( “/ USR /本地/ LIB / python2.7 /站点包/ ReportLab的/的初始化 pyc文件”) 我被触发时在脚本中但似乎没有帮助。