virtualenvの仮想環境で作ったeggを別の仮想環境にインストールする
先週の続き。
今回も先週と同じ次のサイトを参考にした。
cf. python開発環境の構築から作成したeggを別環境へインストールするまで
まずはvirtualenvで仮想環境をひとつ作る。
^o^ > virtualenv --no-site-packages myenvA
New python executable in myenvA\Scripts\python.exe
Installing Setuptools...........................................................
................................................................................
................................................................................
.........................done.
Installing Pip..................................................................
................................................................................
................................................................................
................................................................................
.......................done.
作った仮想環境の中に入ってアクティベートする。
^o^ > cd myenvA
^o^ > Scripts\activate
(myenvA) ^o^ >
Python では、Paster というeggの雛形を作ってくれるツールがあるようなので、それをインストールする。
(myenvA) ^o^ > pip install PasteScript
なんかいろいろとメッセージが出て、インストール完了。
(myenvA) ^o^ > pip list
Paste (1.7.5.1)
PasteDeploy (1.5.0)
PasteScript (1.7.5)
pip (1.4)
setuptools (0.9.7)
作れる雛形を確認。
(myenvA) ^o^ > paster create --list-template
Available templates:
basic_package: A basic setuptools-enabled package
paste_deploy: A web application deployed through paste.deploy
今回は basic_package の雛形を作る。コマンドを実行するといくつか質問をしてくるので適宜入力。
(myenvA) ^o^ > paster create -t basic_package MyPkg
Selected and implied templates:
PasteScript#basic_package A basic setuptools-enabled package
Variables:
egg: MyPkg
package: mypkg
project: MyPkg
Enter version (Version (like 0.1)) ['']: 0.1
Enter description (One-line description of the package) ['']: MyPkg
Enter long_description (Multi-line description (in reST)) ['']: MyPkg
Enter keywords (Space-separated keywords/tags) ['']:
Enter author (Author name) ['']: takatoh
Enter author_email (Author email) ['']: takatoh.m@gmail.com
Enter url (URL of homepage) ['']:
Enter license_name (License name) ['']:
Enter zip_safe (True/False: if the package can be distributed as a .zip file) [F
alse]:
Creating template basic_package
Creating directory .\MyPkg
Recursing into +package+
Creating .\MyPkg\mypkg/
Copying __init__.py to .\MyPkg\mypkg\__init__.py
Copying setup.cfg to .\MyPkg\setup.cfg
Copying setup.py_tmpl to .\MyPkg\setup.py
Running C:\Users\takatoh\Documents\w\myenvA\Scripts\python.exe setup.py egg_info
カレントディレクトリに MyPkg というディレクトリができて、次のようにファイルが追加されている。
(myenvA) ^o^ > dir MyPkg
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は FE2A-F7C6 です
C:\Users\takatoh\Documents\w\myenvA\MyPkg のディレクトリ
2013/08/10 15:08 <DIR> .
2013/08/10 15:08 <DIR> ..
2013/08/10 15:08 <DIR> mypkg
2013/08/10 15:08 <DIR> MyPkg.egg-info
2013/08/10 15:08 51 setup.cfg
2013/08/10 15:08 672 setup.py
2 個のファイル 723 バイト
4 個のディレクトリ 364,625,993,728 バイトの空き領域
作られたパッケージの中に、通常のパッケージと同じようにコードを書く。今回は参考サイトに倣って MyPkg/mypkg/utils.py を書く。
def somemethod():
print "called somemethod()!!"
さて、egg を作るには Paster が出力してくれている setup.py を使う。
(myenvA) ^o^ > cd MyPkg
(myenvA) ^o^ > dir
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は FE2A-F7C6 です
C:\Users\takatoh\Documents\w\myenvA\MyPkg のディレクトリ
2013/08/10 15:08 <DIR> .
2013/08/10 15:08 <DIR> ..
2013/08/10 15:17 <DIR> mypkg
2013/08/10 15:08 <DIR> MyPkg.egg-info
2013/08/10 15:08 51 setup.cfg
2013/08/10 15:08 672 setup.py
2 個のファイル 723 バイト
4 個のディレクトリ 364,625,248,256 バイトの空き領域
(myenvA) ^o^ > python setup.py bdist_egg
running bdist_egg
running egg_info
writing MyPkg.egg-info\PKG-INFO
writing top-level names to MyPkg.egg-info\top_level.txt
writing dependency_links to MyPkg.egg-info\dependency_links.txt
writing entry points to MyPkg.egg-info\entry_points.txt
reading manifest file 'MyPkg.egg-info\SOURCES.txt'
writing manifest file 'MyPkg.egg-info\SOURCES.txt'
installing library code to build\bdist.win32\egg
running install_lib
running build_py
creating build
creating build\lib
creating build\lib\mypkg
copying mypkg\utils.py -> build\lib\mypkg
copying mypkg\__init__.py -> build\lib\mypkg
creating build\bdist.win32
creating build\bdist.win32\egg
creating build\bdist.win32\egg\mypkg
copying build\lib\mypkg\utils.py -> build\bdist.win32\egg\mypkg
copying build\lib\mypkg\__init__.py -> build\bdist.win32\egg\mypkg
byte-compiling build\bdist.win32\egg\mypkg\utils.py to utils.pyc
byte-compiling build\bdist.win32\egg\mypkg\__init__.py to __init__.pyc
creating build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\PKG-INFO -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\SOURCES.txt -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\dependency_links.txt -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\entry_points.txt -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\not-zip-safe -> build\bdist.win32\egg\EGG-INFO
copying MyPkg.egg-info\top_level.txt -> build\bdist.win32\egg\EGG-INFO
creating dist
creating 'dist\MyPkg-0.1dev-py2.7.egg' and adding 'build\bdist.win32\egg' to it
removing 'build\bdist.win32\egg' (and everything under it)
これで dist ディレクトリに MyPkg-0.1dev-py2.7.egg という eggファイルができている。
(myenvA) ^o^ > dir dist
ドライブ C のボリューム ラベルは OS です
ボリューム シリアル番号は FE2A-F7C6 です
C:\Users\takathh\Documents\w\myenvA\MyPkg\dist のディレクトリ
2013/08/10 15:22 <DIR> .
2013/08/10 15:22 <DIR> ..
2013/08/10 15:22 1,788 MyPkg-0.1dev-py2.7.egg
1 個のファイル 1,788 バイト
2 個のディレクトリ 364,540,661,760 バイトの空き領域
じゃあ、次は別の仮想環境を作ってそこに今作ったeggをインストールしよう。
^o^ > virtualenv --no-site-packages myenvB
(略)
^o^ > cd myenvB
^o^ > Scripts\activate
(myenvB) ^o^ >
ここにさっき作ったeggを持ってきてインストールする。
(myenvB) ^o^ > copy ..\myenvA\MyPkg\dist\MyPkg-0.1dev-py2.7.egg
1 個のファイルをコピーしました。
(myenvB) ^o^ > pip install MyPkg-0.1dev-py2.7.egg
Downloading/unpacking MyPkg-0.1dev-py2.7.egg
Could not find any downloads that satisfy the requirement MyPkg-0.1dev-py2.7.e
gg
Cleaning up...
No distributions at all found for MyPkg-0.1dev-py2.7.egg
Storing complete log in C:\Users\hiro\Documents\pip\pip.log
おっと、eggのインストールに pip は使えないようだ。じゃ、easy_install で。
(myenvB) ^o^ > python -m easy_install MyPkg-0.1dev-py2.7.egg
Processing MyPkg-0.1dev-py2.7.egg
removing 'c:\users\takatoh\documents\w\myenvb\lib\site-packages\MyPkg-0.1dev-py2
.7.egg' (and everything under it)
creating c:\users\takatoh\documents\w\myenvb\lib\site-packages\MyPkg-0.1dev-py2.
7.egg
Extracting MyPkg-0.1dev-py2.7.egg to c:\users\takatoh\documents\w\myenvb\lib\sit
e-packages
MyPkg 0.1dev is already the active version in easy-install.pth
Installed c:\users\takatoh\documents\w\myenvb\lib\site-packages\mypkg-0.1dev-py2
.7.egg
Processing dependencies for MyPkg==0.1dev
Finished processing dependencies for MyPkg==0.1dev
(myenvB) ^o^ > pip list
mypkg (0.1dev)
pip (1.4)
setuptools (0.9.7)
さあ、うまくいっているかどうか試してみよう。
次のコードを書いて実行してみる。
from mypkg.utils import *
if __name__ == '__main__':
somemethod()
(myenvB) ^o^ > python test.py
called somemethod()!!
うまくいった!!
