python包导入在本地工作,然后在cronjob中崩溃

2024-06-16 15:29:17 发布

您现在位置:Python中文网/ 问答频道 /正文

运行cronjob时出现以下错误:

From cchilders@C02S21TWG8WMMBP.localdomain  Fri Sep 30 15:58:00 2016
Return-Path: <cchilders@C02S21TWG8WMMBP.localdomain>
X-Original-To: cchilders
Delivered-To: cchilders@C02S21TWG8WMMBP.localdomain
Received: by C02S21TWG8WMMBP.localdomain (Postfix, from userid 501)
    id D84CE1453D2; Fri, 30 Sep 2016 15:58:00 -0500 (CDT)
From: cchilders@C02S21TWG8WMMBP.localdomain (Cron Daemon)
To: cchilders@C02S21TWG8WMMBP.localdomain
Subject: Cron <cchilders@C02S21TWG8WMMBP> /usr/local/bin/python ~/scripts/updates/update_files.py pull
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=cchilders>
X-Cron-Env: <USER=cchilders>
X-Cron-Env: <HOME=/Users/cchilders>
Message-Id: <20160930205800.D84CE1453D2@C02S21TWG8WMMBP.localdomain>
Date: Fri, 30 Sep 2016 15:58:00 -0500 (CDT)

Traceback (most recent call last):
  File "/Users/cchilders/scripts/updates/update_files.py", line 12, in <module>
    from ez_scrip_lib.updates import pull_system_file_from_scripts_project_and_update_it, push_system_file_to_scripts_project
ImportError: No module named ez_scrip_lib.updates

但这个图书馆是绝对可用的:

In [1]: from ez_scrip_lib.updates import pull_system_file_from_scripts_project_and_update_it, push_system_file_to_scripts_project

In [2]: 

/scripts/updates/update\文件.py:

#!/usr/bin/env python


import sys
from ez_scrip_lib.updates import pull_system_file_from_scripts_project_and_update_it, push_system_file_to_scripts_project

files = [{'real_path': '.fake', 'repo_path': 'bash/fake-one'},
         {'real_path': '.fake2', 'repo_path': 'bash/fake2'},
         {'real_path': '.fake3', 'repo_path': 'bash/fake3'}
]

callbacks = {'pull': pull_system_file_from_scripts_project_and_update_it,
             'push': push_system_file_to_scripts_project}

args = sys.argv
purpose_arg = args[1]

for f in files:
    callbacks[purpose_arg](**f)

最近我用#!/usr/local/bin/python将shebang改为match,但仍然不起作用

我现在可以从我的.bash\u配置文件中找到我的包:

SCRIPTS="$HOME/scripts"
export PYTHONPATH="${PYTHONPATH}:$SCRIPTS"

脚本项目:

~/脚本/

__init__.py
~/scripts/__init__.py
~/scripts/ez_scrip_lib/__init__.py
~/scripts/ez_scrip_lib/updates.py
~/scripts/updates/update_files.py

为了方便起见,我的库ez_scrip_lib也在脚本项目中(我一次在一个编辑器中更新所有内容)。它可能应该被打断,因为它非常大,但是我的脚本在查找ez_scrip_lib中的内容时一次也没有遇到问题。只有在这种情况下,它才会失败

此脚本在命令行中正常运行:

./scripts/updates/update_files.py pull

从crontab中删除python解释器,因为脚本已经有shebang(一个建议)也不起作用:

*/1 * * * * ~/scripts/updates/update_files.py pull

同样的错误

Cronjobs似乎总是因为某些原因无法运行python文件,但至少在Mac上,我会自动获得错误日志。如何让这个cronjob在运行python脚本时找到我的包?谢谢


Tags: frompyprojectlibscriptsupdatesystempull
1条回答
网友
1楼 · 发布于 2024-06-16 15:29:17

Cron不知道哪个目录与您的项目相关,只知道哪些目录与自身相关。它可能在拉兰的某个地方寻找模块。快速修复方法可能是指定脚本的工作目录,然后尝试导入模块:

os.chdir("/Users/cchilders/scripts/updates")

或者沿着这条线的东西应该让事情恢复正常

相关问题 更多 >