pythonその10 scrapyのインストール
失敗した。’_bz2’がないらしい。libbz2-devはインストールしたのだけれど。
tarfile.CompressionError: bz2 module is not available
どうもpython 3.4.3をpyenvで準備した時の問題のように思える。bzip2がどうとかwarningめいたものが出てるし。気にするべきだったようだ…
pyenvのwikiをみて何個かdevパッケージを追加
libreadline-dev, llvm, libncurses5-dev
pyenvでインストールやり直し。
% pyenv uninstall 3.4.3 pyenv: remove /opt/pyenv/versions/3.4.3? y % pyenv version pyenv: version `3.4.3' is not installed % pyenv install 3.4.3 Downloading Python-3.4.3.tgz... -> https://yyuu.github.io/pythons/4281ff86778db65892c05151d5de738d Installing Python-3.4.3... Installed Python-3.4.3 to /opt/pyenv/versions/3.4.3 % pyenv version 3.4.3 (set by PYENV_VERSION environment variable)
これに加えて、自分の環境ではlibxslt-devがscrapyのインストールが必要だったのでapt-get installした。
いやー侮れないですね、warning。
Related posts
markdownパーサを作った
ブログとは別のかたちで、今まで書いたメモをネットに載せたく、でもWikiだとメジャーなのはphp製なので中身が分からなかったり、ネット上で書くのがなんとなくおっくうだったり、最近fcgiの勉強したけど、使い道がなかったり、他の人と変わったことがして見たかったりで、fcgiで動くc++製のmarkdownパーサを書いてみた。 notes wikiを書くのはおっくうだけど、結局ローカルに持ってるノートもmarkdown形式に書き直す必要があったり…でも、そこはkobitoで書いて、サーバにアップロードしようかと思っている。
pythonその4 環境周りとdjangoインストール
ファイルの先頭行に何を書くのか? 直接実行したい時は以下を書くと良い。 #!/usr/bin/env python 具体的には直接実行しないクラスを書いたファイルには不要。 デフォルトエンコーディングは書いておいた方が良さそう。 # -*- coding: utf-8 -*- rubyでのrbenvみたいなのは? わたしゃさくらのvpsにubuntu 14.04.02 LTSを入れて学習中。 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=14.04 DISTRIB_CODENAME=trusty DISTRIB_DESCRIPTION="Ubuntu 14.04.2 LTS" なのですが、既に以下の状態。ここから実行環境の切り替えとかできるんだろうか… $ find /usr/bin -name "python*" | xargs ls -l lrwxrwxrwx 1 root root 9 Dec 21 2013 /usr/bin/python -> python2.7 lrwxrwxrwx 1 root root 9 Dec 21 2013 /usr/bin/python2 -> python2.7 -rwxr-xr-x 1 root root 3345416 Jun 23 03:51 /usr/bin/python2.7 lrwxrwxrwx 1 root root 9 Mar 23 2014 /usr/bin/python3 -> python3.4 -rwxr-xr-x 2 root root 4061272 Jun 20 00:35 /usr/bin/python3.4 -rwxr-xr-x 2 root root 4061272 Jun 20 00:35 /usr/bin/python3.4m lrwxrwxrwx 1 root root 10 Mar 23 2014 /usr/bin/python3m -> python3.4m rubyのrbenvみたいなのは、direnvかpyenvらしい。virtualenvはその前みたい。誰かその辺の歴史みたいなのとかまとめてくれんかな。direnvはpythonもrubyもまとめて面倒みまっせ的なものみたいだけど、既にrbenvは導入済だし、今回はpyenvでやってみることにする。他の人のやり方を見つつ、以前にrbenv入れたのをhistoryで推測しながら以下を実行した。 % cd /opt % sudo git clone git://github.com/yyuu/pyenv.git pyenv % sudo groupadd pyenv % sudo gpasswd -a ユーザ名 pyenv % sudo chgrp -R pyenv pyenv % sudo chmod -R g+rwxXs /opt/pyenv % sudo mkdir /opt/pyenv/shims % sudo mkdir /opt/pyenv/versions % sudo chmod -R g+rwxXs /opt/pyenv/shims % sudo chmod -R g+rwxXs /opt/pyenv/versions % echo ‘export PYENV_ROOT="/opt/pyenv"’ >> .zshrc % echo ‘if [ -d "${PYENV_ROOT}" ]; then’ >> .zshrc % echo ‘ export PATH=${PYENV_ROOT}/bin:$PATH’ >> .zshrc % echo ‘ eval "$(pyenv init -)"’ >> .zshrc % echo ‘fi’ >> ~/.zshrc % source ~/.zshrc なお、参考にさせていただいたのは以下でございます m(. .)m Ubuntu 12.04でpyenvを利用して速攻でPython3.4 + Nginx + uWSGI + FlaskなWebアプリケーション実行環境を作る (Qiita) Ubuntuにpyenvを用いてpythn環境を構築しました。(たくのこWeb) /usr/binにインストールされているpythonは置いといて、version 3.4.3をインストール。インストール前にdjangoとversionの整合性は確認した。インストールにはそこそこ時間かかる。何やらWARNINGが出てるが、気にしないったら気にしない。 % pyenv install 3.4.3 Downloading Python-3.4.3.tgz… -> https://yyuu.github.io/pythons/4281ff86778db65892c05151d5de738d […]
vagrantでdjangoでユーザ認証
ユーザ認証して、認証後のユーザ利用まで動作できたのでまとめる。 できたけど、フレームワークが提供してくれてるがいろいろ面倒くさい。 djangoって結構自前で作る部分が多いかと思うので、フレームワークがやってくれるのか、そこは自前なの?!、とかが分からなくてしんどかった。 Djangoのユーザ認証まとめ | c-bata web とはいえユーザ認証する部分は上記サイトをまるまる参考にさせていただきました。 せいぜいurls.pyの書き方が違うくらい。 urlpatterns = [ url(r’^admin/’, include(admin.site.urls)), url(r’^login/$’, ‘django.contrib.auth.views.login’, {‘template_name’: ‘account/login.html’}), url(r’^logout/$’, ‘django.contrib.auth.views.logout’, {‘template_name’: ‘account/logout.html’}), url(r’^account/’, include(‘account.urls’, namespace=’account’)), ] ユーザ認証を別のアプリケーションから利用するところが今回の記事のメインなんだけど、モデルを起こすところも、c-bata webさんの記事を参考にさせてもらいました。しかし、差分だけ書くと作業の流れがわかりにくいので丸々書く。 アプリケーションをこさえる。todoを残すだけのアプリ。 $ python manage.py startapp todo setting.pyのINSTALLED_APPSにtodoを追加。 +++ b/django_auth/settings.py @@ -38,6 +38,7 @@ INSTALLED_APPS = ( ‘django.contrib.messages’, ‘django.contrib.staticfiles’, ‘account’, + ‘todo’, ) urls.pyにルーティングを追加。 +++ b/django_auth/urls.py @@ -23,5 +23,6 @@ urlpatterns = [ url(r’^logout/$’, ‘django.contrib.auth.views.logout’, {‘template_name’: ‘account/logout.html’}), url(r’^account/’, include(‘account.urls’, namespace=’account’)), + url(r’^todo/’, include(‘todo.urls’)), ] モデルを定義。外部キーとしてdjangoのUserモデルを指定。 from django.db import models from django.contrib.auth.models import User # Create your models here. class Todo(models.Model): user = models.ForeignKey(User, related_name=’todo’) memo = models.CharField(‘Memo’, max_length=128) admin.py。 from django.contrib import admin from todo.models import Todo # Register your models here. admin.site.register(Todo) todo/urls.pyはフレームワーク生成ではなく、自分で作成。表示のみ。更新はadminからやる。 from django.conf.urls import url from django.contrib.auth.decorators import login_required from django.views.generic import TemplateView from . import views urlpatterns = [ url(r’^$’, login_required(views.IndexView.as_view( template_name=’todo/index.html’)), name="index"), ] views.py。何をこんなにimportしなきゃいかんのか分かってないけど、やる。しょうがない。まだdjangoはチュートリアルと、これしか作ってないし。 from django.shortcuts import render from django.core.urlresolvers import reverse from django.views import generic from django.http import HttpResponseRedirect, HttpResponse, Http404 from django.template import RequestContext, loader from django.contrib.auth.decorators import login_required from django.contrib.auth.models import User from .models import Todo # Create your views here. class IndexView(generic.ListView): template_name = ‘todo/index.html’ context_object_name = ‘todo_list’ def get_queryset(self): # reffer django-document. # Built-in class-based generic views > Dynamic.filtering # print(self.request.user) return Todo.objects.filter(user_id = self.request.user.id) テンプレートの追加。ディレクトリ構成が気持ち悪いけど、他の書き方がよく分からない。 % mkdir -p todo/templates/todo/ % touch todo/templates/todo/index.html ▽ <p>{{ user.username }}</p> {% if todo_list %} <ul> {% […]
- Author: vottie
- Category: コンピュータ
- Tags: authentication, django, python
Trackbacks and Pingbacks on this post
No trackbacks.
- TrackBack URL
Comments on this post