代码之家  ›  专栏  ›  技术社区  ›  Ardy Dedase

导入错误:没有名为couchbase.libouchbase的模块

  •  1
  • Ardy Dedase  · 技术社区  · 9 年前

    这只发生在特拉维斯,身材矮小的我身上。 以下是准确的错误字符串:

    Traceback (most recent call last):
      File "app_main.py", line 75, in run_toplevel
      File "app_main.py", line 581, in run_it
      File "<string>", line 1, in <module>
      File "tests/test_pycouchbase.py", line 15, in <module>
        from pycouchbase.utils import *
      File "pycouchbase/__init__.py", line 8, in <module>
        from .connection import Connection
      File "pycouchbase/connection.py", line 3, in <module>
        from couchbase.bucket import Bucket
      File "/home/travis/virtualenv/pypy-2.5.0/site-packages/couchbase/__init__.py", line 28, in <module>
        from couchbase.user_constants import *
      File "/home/travis/virtualenv/pypy-2.5.0/site-packages/couchbase/user_constants.py", line 21, in <module>
        import couchbase._bootstrap
      File "/home/travis/virtualenv/pypy-2.5.0/site-packages/couchbase/_bootstrap.py", line 34, in <module>
        import couchbase.exceptions as E
      File "/home/travis/virtualenv/pypy-2.5.0/site-packages/couchbase/exceptions.py", line 18, in <module>
        import couchbase._libcouchbase as C
    ImportError: No module named couchbase._libcouchbase
    

    我已经在尝试安装couchbase_cffi,但看起来 _libcouchbase.so 文件仍然丢失。

    要生成的链接: https://travis-ci.org/ardydedase/pycouchbase/jobs/75973023#L1782

    Travis配置文件:

    # Config file for automatic testing at travis-ci.org
    
    language: python
    
    python:
      - "3.4"
      - "3.3"
      - "2.7"
      - "2.6"
      - "pypy"
    
    before_install:
      - sudo rm -rf /etc/apt/sources.list.d/*
      - sudo add-apt-repository -y ppa:pypy/ppa
      - wget -O- http://packages.couchbase.com/ubuntu/couchbase.key | sudo apt-key add -
      - echo deb http://packages.couchbase.com/ubuntu precise precise/main | sudo tee /etc/apt/sources.list.d/couchbase.list
      - sudo apt-get update
      - sudo apt-cache search libcouchbase
    
    install:
      # GCC
      - sudo apt-get install python-software-properties
      - sudo add-apt-repository -y ppa:ubuntu-toolchain-r/test
      - sudo apt-get update
      - sudo apt-get -y install gcc-4.8
      - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
      # libcouchbase dependencies
      - sudo apt-get -y install libxml2-dev libxslt-dev python-all-dev libffi6 libffi-dev 
      - sudo apt-get -y install build-essential libssl-dev python-openssl
      - sudo apt-get -y install libcouchbase-dev libcouchbase2-core libcouchbase2-libevent libevent-dev python-gevent
      - pip -q install gevent || echo "Couldn't find gevent"
      - pip -q install twisted
      - pip -q install testresources
      - pip install -r requirements.txt
    
    # command to run tests, e.g. python setup.py test
    script: 
      # - cd couchbase-python-cffi
      # - export CFLAGS=-Qunused-arguments
      # - export CPPFLAGS=-Qunused-arguments
      # - python setup.py test  
      # - python setup.py build
      - echo $PWD
      # - if [[ $TRAVIS_PYTHON_VERSION == pypy ]]; then git clone https://github.com/couchbase/couchbase-python-client.git && cd couchbase-python-client && python setup.py build_ext --inplace && cd ..; fi
      - if [[ $TRAVIS_PYTHON_VERSION == pypy ]]; then cd couchbase-python-cffi && python setup.py build  && python setup.py install && cd .. && ls -al; fi  
      - if [[ $TRAVIS_PYTHON_VERSION == pypy ]]; then ls -al /home/travis/virtualenv/pypy-2.5.0/site-packages/couchbase; fi
      - python -c "from tests import test_pycouchbase; print(test_pycouchbase)"  
      - python runtests.py
    

    我确实尝试过引用这个线程: https://forums.couchbase.com/t/installing-couchbase-1-0-0-on-ubuntu/291 ,但我找不到 build 正在其中引用的文件夹。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Mark Nunberg    9 年前

    如果使用cffi模块 必须 import couchbase_ffi 在其他事情之前。原因是 couchbase_ffi 作为 couchbase._libcouchbase 单元

    在“正常”扩展下, 沙发座_libcouchbase 包含构建的正常CPython扩展代码。由于CPyext在pypy下无法正常工作,因此该平台上的代码构建被禁用,您需要事先“注入”ffi模块。

    诚然,这是一个令人讨厌的步骤,而且不是最“透明”的步骤。你可能可以做一些类似…(未经测试!!!)的事情: try import couchbase; except ImportError: import couchbase_ffi