web-dev-qa-db-ja.com

ファブリックインポートエラー:名前「isMappingType」をインポートできません

Django Project。のfabfileをデプロイするプロセスの途中で、この "ImportError:名前 'isMappingType'をインポートできません"に遭遇しました。

1. fabfile.pyの構造を次に示します

from __future__ import with_statement
from fabric.api import *
from fabric.contrib.console import confirm
from fabric.contrib.files import append, exists, sed

env.hosts = ["127.0.0.1"]

env.user = raw_input('Please enter user:')

def deploy():
      Sudo("apt-get update -y")
Sudo("apt-get install git -y")
Sudo("apt-get install postgresql libpq-dev python-dev python-pip -y")

code_dir = 'backend-directory'

if exists(code_dir):
   run('cd %s && git pull' % (code_dir,)) 
else:
   run("git clone git://serveraddress/projects/backend-directory")


with cd(code_dir):
  Sudo("pip install virtualenv")
  run("virtualenv -p /usr/bin/python3.4 venv")
  run("source venv/bin/activate")
  #Sudo("pip install -r requirements/dev.txt")
  Sudo("pip install -r requirements/production.txt")

  with settings(warn_only=True):
    with settings(Sudo_user = 'postgres'):
        Sudo("psql -c " + '"CREATE USER new_user WITH PASSWORD ' + "'new_password';" + '"')
        Sudo("psql -c 'ALTER USER new_user CREATEDB;'")
        Sudo("psql -c 'CREATE DATABASE newdb;'")
        Sudo("psql -c 'GRANT ALL PRIVILEGES ON DATABASE 'newdb' to new_user;'")

    if run("nginx -v").failed:
        Sudo(" apt-get install nginx -y")

code_dir = 'frontend-directory' 

if exists(code_dir):
   run('cd %s && git pull' % (code_dir,)) 
else:
   run("git clone git://serveraddress/frontend-directory")


code_dir = 'backend-directory/project_site'

with cd(code_dir):

    run("python manage.py makemigrations --settings=project.settings.development")
    run("python manage.py migrate --settings=project.settings.development")
    Sudo("/etc/init.d/nginx start")

    with settings(warn_only=True):
      if run("find /etc/uwsgi").failed:
          Sudo("mkdir /etc/uwsgi")
      if run("find /etc/uwsgi/vassals").failed:
          Sudo("mkdir /etc/uwsgi/vassals")
      if run("find /etc/uwsgi/vassals/pam_uwsgi.ini").failed:
          Sudo("ln -s ~/backend-direcoty/project_site/pam_uwsgi.ini /etc/uwsgi/vassals/") 

    run("uwsgi --emperor /etc/uwsgi/vassals --uid www-data --gid www-data")

次に、仮想環境で以下のコマンドを実行しました

(venv)praneeth@praneeth-Latitude-E6400 ~/wru-pam $ fab deploy

私は次のトレースバックを得ました:-

Traceback (most recent call last):
  File "/home/praneeth/wru-pam/venv/bin/fab", line 9, in <module>
    load_entry_point('Fabric==1.10.1', 'console_scripts', 'fab')()
  File "/home/praneeth/wru-pam/venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 474, in load_entry_point
    return get_distribution(dist).load_entry_point(group, name)
  File "/home/praneeth/wru-pam/venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 2582, in load_entry_point
    return ep.load()
  File "/home/praneeth/wru-pam/venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 2265, in load
    return self._load()
  File "/home/praneeth/wru-pam/venv/lib/python3.4/site-packages/pkg_resources/__init__.py", line 2268, in _load
    module = __import__(self.module_name, fromlist=['__name__'], level=0)
  File "/home/praneeth/wru-pam/venv/lib/python3.4/site-packages/fabric/main.py", line 12, in <module>
    from operator import isMappingType
ImportError: cannot import name 'isMappingType'

このインポートエラーの理由は何ですか?

25
Praneeth

fabricはサポートしていませんPython 3

Fabricは、Python(2.5-2.7))ライブラリであり、アプリケーション展開またはシステム管理タスクのためのSSHの使用を合理化するためのコマンドラインツールです。

他のポイントと回避策も参照してください。

私が理解していることから、 invoke への移行が最初に考慮すべき事項です。


問題を示すクイックテスト:

$ python2.7
>>> from operator import isMappingType
>>>

$ python3.4
>>> from operator import isMappingType
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'isMappingType'
33
alecxe

Python 3ファブリックの実装がリリースされるまで、利用可能な任意のフォークを使用することもできます。

それらの1つは、fabric3pipパッケージで利用できます。これは、Python 3:

pip install fabric3またはpip3 install fabric3でインストールします

これは、次の質問の回答の1つでも言及されています: Python 3 for fabric for support

個人的には、ファブリックを使用してサイトを構築または提供するペリカンのブログで使用しています。今のところ問題なく動作します。

26
quasoft

python2:pip install fabric python3:pip install fabric3

4
babyshen