【问题标题】:Python cx_Oracle errorPython cx_Oracle 错误
【发布时间】:2017-02-16 17:10:57
【问题描述】:

我尝试在 Ubuntu 上使用 crontab 运行 python scrapy 爬虫,但收到以下错误消息:

Traceback (most recent call last):
  File "/usr/bin/scrapy", line 9, in <module>
    load_entry_point('Scrapy==1.0.3', 'console_scripts', 'scrapy')()
  File "/usr/lib/python2.7/dist-packages/scrapy/cmdline.py", line 142, in execu$
    cmd.crawler_process = CrawlerProcess(settings)
  File "/usr/lib/python2.7/dist-packages/scrapy/crawler.py", line 209, in __ini$
    super(CrawlerProcess, self).__init__(settings)
  File "/usr/lib/python2.7/dist-packages/scrapy/crawler.py", line 115, in __ini$
    self.spider_loader = _get_spider_loader(settings)
  File "/usr/lib/python2.7/dist-packages/scrapy/crawler.py", line 296, in _get_$
    return loader_cls.from_settings(settings.frozencopy())
  File "/usr/lib/python2.7/dist-packages/scrapy/spiderloader.py", line 30, in f$
    return cls(settings)
  File "/usr/lib/python2.7/dist-packages/scrapy/spiderloader.py", line 21, in _$
    for module in walk_modules(name):
  File "/usr/lib/python2.7/dist-packages/scrapy/utils/misc.py", line 71, in wal$
    submod = import_module(fullpath)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/home/kebodev/scrapy/qgtest2/qgtest2/spiders/jsonspider.py", line 5, in <module>
    import cx_Oracle
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

我用 root 用户编辑我的 ~/.bashrc 并添加了以下行:

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export PATH=$ORACLE_HOME/bin:$PATH

我的 libclntsh.so.11.1 位于此处:/u01/app/oracle/product/11.2.0/xe/lib

如果我尝试从终端运行我的 python scrapy 爬虫,它正在运行,如果我尝试在 python shell 中导入 cx_Oracle,它也可以工作,但使用 crontab 就不行了..

这就是我的 cron 工作线的样子:

* * * * * root /etc/listarunner.sh >> /home/kebodev/scrapy/qgtest2/etcronlog1.log 2>&1

这是我的listarunner.sh 文件:

#!/bin/bash
cd /home/kebodev/scrapy/qgtest2
PATH=$PATH:/usr/local/bin
export PATH
scrapy crawl jsontst

谁能帮帮我?

谢谢!

【问题讨论】:

    标签: python ubuntu scrapy crontab cx-oracle


    【解决方案1】:

    我有几个选项你可以试试:

    1) 在 listarunner.sh 而不是 ~/.bashrc 中设置环境变量

    2) 使用 /etc/ld.so.conf.d 中的文件,使 LD_LIBRARY_PATH 的设置变得不必要

    3) 重新构建cx_Oracle,在构建之前先将环境变量FORCE_RPATH设置为任意值。

    希望其中之一能帮助你!

    【讨论】:

    • 那么,我应该把这行:export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH 放到listarunner.sh 文件中吗?我尝试使用 root 用户和任何其他用户重建和重新安装 cx_Oracle.. 抱歉,但我不明白你在第 2 点的意思。:(谢谢!
    • 第一个问题是。对于第二个,如果您在目录 /etc/ld.so.conf.d 中创建一个具有任何名称的文件,并且其内容包含您要添加到 LD_LIBRARY_PATH 的目录,系统将自动为您完成。无需重新启动,您必须运行 ldconfig。对于最后一个,哪个用户构建它并不重要,您只需要确保在构建之前设置 FORCE_RPATH。
    • 谢谢,我要试试第一个。对于第二个:我应该将整个 oracle 主目录复制到 /etc/ld.so.conf.d 目录吗?因为这是 LD_LIBARY_PATH 尝试设置的。第三个:我不知道什么是 FORCE_RPATH 我真的很抱歉,但我真的是 unix 系统的新手..
    • 啊,第一个帮了我! :) 谢谢它的工作! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2020-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2012-01-24
    相关资源
    最近更新 更多