Ошибка импорта импорта: невозможно импортировать имя 'isMappingType'
Я столкнулся с этим "ImportError: не могу импортировать имя isMappingType" в середине процесса для развертывания fabfile для проекта Django.
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")
Затем я выполнил следующую команду в виртуальном env
(venv)[email protected] ~/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'
Что может быть причиной этой ошибки импорта?
Ответы
Ответ 1
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'
Ответ 2
Пока реализация Python 3 не будет выпущена, вы также можете использовать любую из доступных вилок.
Один из них доступен в пакете fabric3
, который совместим с Python 3:
Установите его с помощью pip install fabric3
или pip3 install fabric3
Это также упоминается в одном из ответов в следующем вопросе: Поддержка Python 3 для ткани
Я лично использую его в блоге Пеликан, который использует ткань для создания или обслуживания сайта. Он работает безупречно.
Ответ 3
python2: установочная ткань pip
python3: pip install fabric3
Ответ 4
Вот как я его исправил,
Удалить python3
sudo apt-get remove 'python3.*'
Установите ткань, используя:
pip install fabric
sudo apt-get install fabric
Я получил эту ошибку, когда я запустил fab polish
после нее:
zsh:/usr/local/bin/fab: плохой интерпретатор:/usr/bin/python3: нет такого файла или каталога
Откройте /usr/local/bin/fab
в vim как sudo и измените первую строку i.e
#!/usr/bin/python3
до #!/usr/bin/python2.7
Сохраните и запустите fab polish. Все хорошо сейчас!