SlideShare a Scribd company logo
1 of 51
Download to read offline
What Makes Pyramid
      Unique!
  Django & Pylons Con 2012
           aodag
お前誰よ

Atsushi Odagiri

株式会社ビープラウド

http://twitter.com/aodag
http://facebook.com/aodag
Pyramid 仕事で使ってます
機能追加のパッチを投げました
Pythonは1.5から。
Pyramidは、repoze.bfg1.2のころから。
今日のお話

Pyramidって何?
どんな特徴が?
実際どんな開発の仕方?
Pyramidとは?

Pylonsプロジェクトの
Webアプリケーションフレームワーク

Simple, Fast, Tested, Documented

No ORM, No Template Engine.
Pyramidができるまで

  WSGI                Zope




  Pylons             Repoze


           Pyramid
Zopeから受け継いだもの

Zope Component Architecture
URLトラバーサル
コンテキストベースのセキュリティ機構
Pylonsから受け継いだもの

WebOb, BeakerなどのWSGIコンポーネント
URLパターンでのディスパッチ
PasteScript
(ただしPython3対応のために独自コマンドとして取
り込まれた)
Pyramidの設計方針

仕組みをたくさん提供する
ポリシーを押し付けない
コンポーネント指向を直接見せない
ことさらマイクロフレームワークを意識しない
特徴的なしくみ

デコレータベースの設定
さまざまなフック
例外ビュー
デコレータベースの設定

 ユニットテスト中に
副作用のあるデコレータ
  が実行されると、
うっとおしいですよね?
デコレータベースの設定

デコレータでビューなどを登録できる

ただし、いきなり登録するのではなく
Configurator.scan()をトリガーとして、初めて登録
される。
さまざまなフック

フレームワークの途中に処理を
   割り込ませたいこと、
  たくさんありますよね?
さまざまなフック

NewRequest
Tween
BeforeRender
など
例外ビュー

 処理を打ち切って、
    さっさと
レスポンスを返したいこ
     と、
たくさんありますよね?
例外ビュー

例外クラスごとにそれぞれビューを設定可能
view predicate

       同じ処理だけど、
       Ajaxリクエストと
      ブラウザリクエストで
       テンプレートとか
       変更したいよね?
view predicate
name             xhr
context          accept
route_name       header
request_type     path_info
request_method   custom_predicate
request_param
match_param
view predicate
@view_config(.... xhr=True, renderer="json")
@view_config(... xhr=False, renderer="index.
html")
def get_something(request):
  ....
  return dict(items=items)
その他いろいろ

シングルトンは存在しない
継承を多様しない
開発を助けるコマンド群

pcreate
pserve

pshell
prequest

proutes
pviews
ptweens
pcreate
プロジェクトテンプレート(Scaffold)を展開する
開発開始時の土台を作成するツール

ユーザー定義のプロジェクトテンプレートも作成で
きる
pserve
Webアプリケーションを実行する
--reloadオプションで、ファイル更新を検地してリ
ロードしてくれる

daemon化やモニタリングしてリスタートさせること
も可能
pshell
Webアプリケーション実行時の環境を擬似的に作
成して、Pythonシェルを起動する
prequest
Webアプリケーションをオフラインで実行して結果
を確認できる
proutes, pviews, ptweens
アプリケーション構成を確認できる。

例えば:
● URLパターンが実際にどのViewにマッチするの
  か
● 具体的なURLに対応するViewはどれか
● Tweenの実行順序はどのようになっているのか
よく使うライブラリ、ツール

ZODB3             distribute
SQLAlchemy        zc.buildout
zope.sqlalchemy   nose
deform/colander   alembic
WebHelpers
cliff
有力なアドオン

pyramid_tm
pyramid_deform
pyramid_debugtoolbar
pyramid_exclog
pyramid_zodbconn
Pyramidベースのフレームワーク

SubstanceD
Kotti
Cornice

GroundHog
MetaTG
Pyramidでの開発

2つのベースアーキテクチャ

ZODB + トラバーサル
SQLAlchemy + URLディスパッチ
ZODB + トラバーサル

URLパターンとかいらない!
URL -> オブジェクトツリー
URLでオブジェクト取得

例:
URL : /great/bucho/show
トラバーサル : root['great']['bucho'].
   showがない?
showという名前のViewを呼ぶ
Pyramidでの開発 環境構築

mkvirtualenv pycon2012
easy_install pyramid
pcreate -s zodb pycon2012
cd pycon2012
python setup.py develop
Pyramidでの開発

追加のライブラリなど

pyramid_deform
deform_bootstrap
colander
pillow
repoze.filesafe
repoze.folder
setup.pyに依存ライブラリを追加する

install_requires = [
...
"pyramid_deform",
"deform_bootstrap",
"colander",
"pillow",
"repoze.filesafe",
"repoze.folder",
iniファイルにアドオンを追加する

pyramid.includes =
  ....
  pyramid_deform
  deform_bootstrap
Pyramidでの開発

モデルを書く

class Document(Persistent):
   def __init__(self, name, contents):
     super(Document, self).__init__()
     self.__name__ = name
     self.contents = contents
Pyramidでの開発

ビューを書く

@view_config(context=Document,
  renderer='templates/document.pt')
def document_view(request):
  return dict()
テンプレートを書く

<html>
<body>
<h1>${context.__name__}</h1>
<div>
${structure:context.contents}
</div>
</body>
</html>
pshellでモデルデータを登録

$ pshell development.ini
>>> from pyconjp2012.models import
Document
>>> doc = Document('test-document', 'this-is-
document')
>>> root[doc.__name__] = doc
>>> doc.__parent__ = root
>>> import transaction
>>> transaction.commit()
prequestで試してみよう

$ prequest development.ini /test-document
<html>
<body>
<h1>test-document</h1>
<div>
this-is-document
</div>
</body>
</html>
pserveでWebアプリケーションを実行

pserve development.ini --reload
ユーザー入力フォーム

スキーマ定義

class AddDocumentSchema(c.Schema):
   name = c.SchemaNode(c.String())
   contents = c.SchemaNode(c.String(),
     widget=w.RichTextWidget())
ユーザー入力(実装)

class AddDocumentView(FormView):
   schema = AddDocumentSchema()
   buttons = ('save',)

  def save_success(self, params):
    doc = Document(**params)
    self.request.context[doc.__name__] = doc
    doc.__parent__ = self.request.context
    return HTTPFound(self.request.
resource_url(doc))
pyramid_deform (表示)

${structure:form}
Chameleonのテンプレートマクロ(定義)

<html metal:define-macro="html">
<head>
<!-- いろんなヘッダ -->
</head>
<body metal:define-slot="main">
</body>
</html>
Chameleonのテンプレートマクロ(利用)

<html metal:use-macro="base.macros.html">
<body metal:fill-slot="main">
${form}
</body>
</html>
まとめ

使う場合
言われるほど面倒ではない
難しいこともない

使い切る場合
手をいれれられる箇所が多いので、相対的に難し
く感じるかも?
(´  > ω < )こわくないよー
Pyramidの今後

Pyramidベースのフレームワークが発展していく
Python3対応?ああ、去年やってましたね。
テンプレートの標準サポートをなくす方針
Pyramidの今後

管理アプリが欲しい!
今世界中のPylonsどもが実装している。
参考URL

The Pylons Project Documentation http://docs.
pylonsproject.org/en/latest/index.html

Pyramid Documentation http://docs.
pylonsproject.org/en/latest/docs/pyramid.html

Defending Pyramid's Design http://docs.
pylonsproject.
org/projects/pyramid/en/master/designdefense.
html

More Related Content

What's hot

Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returnsdynamis
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会Mugen Fujii
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方Fumihiko Shiroyama
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugYuji Kubota
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話JustSystems Corporation
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」Hiroaki NAKADA
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡Koichiro Sumi
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
GradleどうでしょうTakuma Watabiki
 
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったことRecruit Technologies
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013DQNEO
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまでMugen Fujii
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersTakuma Watabiki
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)Masanori Ishigami
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化maruyama097
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basicTakuma Watabiki
 

What's hot (20)

Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
JavaScript.Next Returns
JavaScript.Next ReturnsJavaScript.Next Returns
JavaScript.Next Returns
 
Hello Java
Hello JavaHello Java
Hello Java
 
第5回勉強会
第5回勉強会第5回勉強会
第5回勉強会
 
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
 
Jenkins と groovy
Jenkins と groovyJenkins と groovy
Jenkins と groovy
 
OpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjugOpenJDK コミュニティに参加してみよう #jjug
OpenJDK コミュニティに参加してみよう #jjug
 
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
 
CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡CIツールのまとめとSide CI - CIツール勉強会@福岡
CIツールのまとめとSide CI - CIツール勉強会@福岡
 
Gradleどうでしょう
GradleどうでしょうGradleどうでしょう
Gradleどうでしょう
 
会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと会社でClojure使ってみて分かったこと
会社でClojure使ってみて分かったこと
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで第4回勉強会 Groovyの文法からSpockまで
第4回勉強会 Groovyの文法からSpockまで
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
Spring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswersSpring in-summer-gradle-hands on-withanswers
Spring in-summer-gradle-hands on-withanswers
 
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
[使い倒し]GitHubのIssueとTFS/VSOのWorkItem連動に挑む(2015/08/26)
 
Java scriptの進化
Java scriptの進化Java scriptの進化
Java scriptの進化
 
Jjug 20140430 gradle_basic
Jjug 20140430 gradle_basicJjug 20140430 gradle_basic
Jjug 20140430 gradle_basic
 
Play勉強会 第3回
Play勉強会 第3回Play勉強会 第3回
Play勉強会 第3回
 

Similar to What makes pyramid unique

Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)kojiokb
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja77web
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をAtsuhiro Kubo
 
120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundryTakayoshi Tanaka
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011Hiroh Satoh
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということYukei Wachi
 
Ruby way-openstack.keynote
Ruby way-openstack.keynoteRuby way-openstack.keynote
Ruby way-openstack.keynoteUchio Kondo
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたJunya Hayashi
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!史識 川原
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法Naruto TAKAHASHI
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309Nobuhiro Sue
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streamingmganeko
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発lalha
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejsTakayoshi Tanaka
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireAkio Katayama
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねNaoto TAKAHASHI
 

Similar to What makes pyramid unique (20)

Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
Google Cloud Messaging for Android ことはじめ(Eclipseから動かしてみる編)
 
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
第9回Symfony勉強会LT Symfony2 meets AngularJS #symfony_ja
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry120315 cloud founry_java_ironfoundry
120315 cloud founry_java_ironfoundry
 
Mvc conf session_5_isami
Mvc conf session_5_isamiMvc conf session_5_isami
Mvc conf session_5_isami
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
 
世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ世界をすこしだけ前に進めるということ
世界をすこしだけ前に進めるということ
 
Ruby way-openstack.keynote
Ruby way-openstack.keynoteRuby way-openstack.keynote
Ruby way-openstack.keynote
 
Pyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみたPyramid + socket.io 人狼を作ってみた
Pyramid + socket.io 人狼を作ってみた
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
Introduction of Rhodes
Introduction of RhodesIntroduction of Rhodes
Introduction of Rhodes
 
Spring Boot概要
Spring Boot概要Spring Boot概要
Spring Boot概要
 
Groovy base gradle_20130309
Groovy base gradle_20130309Groovy base gradle_20130309
Groovy base gradle_20130309
 
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live StreamingMediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
 
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
【17-C-2】 クラウド上でのエンタープライズアプリケーション開発
 
13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs13016 n分で作るtype scriptでnodejs
13016 n分で作るtype scriptでnodejs
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけねGitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
 

More from Atsushi Odagiri

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようAtsushi Odagiri
 
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022Atsushi Odagiri
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02Atsushi Odagiri
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolsAtsushi Odagiri
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolsAtsushi Odagiri
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Atsushi Odagiri
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私Atsushi Odagiri
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡Atsushi Odagiri
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016Atsushi Odagiri
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術Atsushi Odagiri
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonAtsushi Odagiri
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介Atsushi Odagiri
 

More from Atsushi Odagiri (20)

みんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしようみんなのPython勉強会#77 パッケージングしよう
みんなのPython勉強会#77 パッケージングしよう
 
async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022async/await の向こう側 PyCon Kyushu 2022
async/await の向こう側 PyCon Kyushu 2022
 
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02パッケージングの呼び声 Python Charity Talks in Japan 2021.02
パッケージングの呼び声 Python Charity Talks in Japan 2021.02
 
eggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptoolseggとはなんだったのか 栄光のsetuptools
eggとはなんだったのか 栄光のsetuptools
 
pyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptoolspyconjp 2019 LT 今日のsetuptools
pyconjp 2019 LT 今日のsetuptools
 
Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定Pythonでの開発を効率的に進めるためのツール設定
Pythonでの開発を効率的に進めるためのツール設定
 
Pythonとパッケージングと私
Pythonとパッケージングと私Pythonとパッケージングと私
Pythonとパッケージングと私
 
Python3 移行への軌跡
Python3 移行への軌跡Python3 移行への軌跡
Python3 移行への軌跡
 
パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016パッケージングを支える技術 pyconjp2016
パッケージングを支える技術 pyconjp2016
 
Sqlalchemy sqlの錬金術
Sqlalchemy  sqlの錬金術Sqlalchemy  sqlの錬金術
Sqlalchemy sqlの錬金術
 
Clack meetup #1 lt
Clack meetup #1 ltClack meetup #1 lt
Clack meetup #1 lt
 
Pyramid入門
Pyramid入門Pyramid入門
Pyramid入門
 
パッケージングの今
パッケージングの今パッケージングの今
パッケージングの今
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
Bplt11 form alchemy
Bplt11 form alchemyBplt11 form alchemy
Bplt11 form alchemy
 
Python3でwebアプリ
Python3でwebアプリPython3でwebアプリ
Python3でwebアプリ
 
Pyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europythonPyconjp2012 memory-of-europython
Pyconjp2012 memory-of-europython
 
エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介エキPy lt repoze.whoの紹介
エキPy lt repoze.whoの紹介
 
World plonedaylt
World plonedayltWorld plonedaylt
World plonedaylt
 

What makes pyramid unique