【问题标题】:crontab Failed to import the site modulecrontab 导入站点模块失败
【发布时间】:2017-06-09 07:01:22
【问题描述】:

我想让 crontab 运行一个公益项目的 python 脚本。

我可以在 Pycharm 中成功运行脚本。

当我使用 crontab 运行它时,出现错误。

环境:Mac OS,python3.5

我输入 'crontab -e' 后,它显示:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/Users/yy/anaconda/bin/python3:/Users/yy/anaconda/bin/


32 14 * * * PATH=$PATH:/Users/yy/anaconda/bin/ cd /Users/yy/PycharmProjects/selenium_test/ &&  /Users/yy/anaconda/bin/python3 /Users/yy/PycharmProjects/selenium_test/selenium_test.py >> /Users/yy/PycharmProjects/selenium_test/log.txt

我在 /var/mail/username 中收到如下错误:

From yy@YY.local  Thu Jun  8 14:32:00 2017
Return-Path: <yy@YY.local>
X-Original-To: yy
Delivered-To: yy@YY.local
Received: by YY.local (Postfix, from userid 501)
    id A7F1F38FFFCC; Thu,  8 Jun 2017 14:32:00 -0500 (CDT)
From: yy@YY.local (Cron Daemon)
To: yy@YY.local
Subject: Cron <yy@YY> PATH=$PATH:/Users/yy/anaconda/bin/ cd /Users/yy/PycharmProjects/selenium_test/ &&  /Users/yy/anaconda/bin/python3 /Users/yy/PycharmProjects/selenium_test/selenium_test.py >> /Users/yy/PycharmProjects/selenium_test/log.txt
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/Users/yy/anaconda/bin/python3:/Users/yy/anaconda/bin/>
X-Cron-Env: <LOGNAME=yy>
X-Cron-Env: <USER=yy>
X-Cron-Env: <HOME=/Users/yy>
Message-Id: <20170608193200.A7F1F38FFFCC@YY.local>
Date: Thu,  8 Jun 2017 14:32:00 -0500 (CDT)

Failed to import the site module
Traceback (most recent call last):
  File "/Users/yy/anaconda/lib/python3.5/site.py", line 567, in <module>
    main()
  File "/Users/yy/anaconda/lib/python3.5/site.py", line 550, in main
    known_paths = addsitepackages(known_paths)
  File "/Users/yy/anaconda/lib/python3.5/site.py", line 327, in addsitepackages
    addsitedir(sitedir, known_paths)
  File "/Users/yy/anaconda/lib/python3.5/site.py", line 206, in addsitedir
    addpackage(sitedir, name, known_paths)
  File "/Users/yy/anaconda/lib/python3.5/site.py", line 162, in addpackage
    for n, line in enumerate(f):
  File "/Users/yy/anaconda/lib/python3.5/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe7 in position 127: ordinal not in range(128)

我在这个错误上花了两个小时。 但是,没有解决方案有效... 请帮忙。 谢谢!

#

我用的是python3.5,所以默认编码是utf-8。这 UnicodeDecodeError 很奇怪……

【问题讨论】:

  • 我注意到奇怪的事情:1)你的路径上的可执行文件:/Users/yy/anaconda/bin/python3; 2) anaconda 安装在你的路径上的/usr/bin 之后,使它几乎没用
  • 我想澄清一下。我是UIC的在读博士,从事公益项目(一年多无偿收集和传播失踪人员信息)。问题:脚本在 pycharm 中运行良好,但在 contrab 中出现错误。有理由相信 contrab 存在错误。调试了几个小时,终于发现是编码问题。是的,也许这个问题与答案不太匹配。但是,这是我如何分析和解决问题的过程。谢谢!

标签: python-3.x cron


【解决方案1】:

问题在于编码。 Python3.5默认是utf-8。

但是,我安装的一些包是用 Unicode 编码的。

我通过修改path=/Users/user_name/anaconda/lib/python3.5/site.py中的site.py文件解决了这个问题。

第 158 行:

    f = open(fullname, "rb") ->  f = open(fullname, "rb") 

第 163 行:

    if line.startswith("#"): ->  if line.startswith(b"#"):

第 166 行:

if line.startswith(("import ", "import\t")): -> if line.startswith((b"import ", b"import\t")):

第 170 行:

dir, dircase = makepath(sitedir, line) -> dir, dircase = makepath(sitedir, str(line))

我认为修改anaconda中的“site.py”不是一个好主意...

但这解决了问题。 希望对您有所帮助。

【讨论】:

  • 为什么不直接用 ascii 编码保存文件,对奇怪的东西使用 unicode 转义?
  • 您的回答还突显了您的问题实际上提供的信息很少,因此该问题不太可能在未来对某人特别有用。
  • 感谢您的建议。 site.py 实际读取的是由 Anaconda 管理的 site-packages 中的文件。python3.5 的默认编码是 utf8。因此,站点包中的文件使用 utf8 编码。我认为问题可能是我最近安装了一些 encoding=unicode 的包,这导致了问题......
  • 我认为你是对的。我们可以找到encoding=unicode的文件,保存为utf8....这样的话,我们就不用修改site.py了
  • 很抱歉给您带来不便。一开始我误认为是crontab的bug...因为我在pycharm中可以成功运行脚本...
猜你喜欢
  • 2019-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-03
  • 2020-03-30
  • 2019-03-30
相关资源
最近更新 更多