11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

windows 向けバイナリパッケージを wheel フォーマットに変換する

Last updated at Posted at 2014-02-13

ここ で一部のバイナリパッケージの wheel フォーマットが提供されていないため、 easy_install から pip へ完全には移行できないと書いたが、それを解決してくれるかもしれないツール wininst2wheel があったのでメモ。

確認用リポジトリ: https://bitbucket.org/toruuetani/wininst2wheel_test

py2exe

wininst2wheel py2exe-0.6.9.win32-py2.7.exe

というコマンドで py2exe-0.6.9-cp27-none-win32.whl というファイルができた。
これを以下のコマンドでインストールする。

pip install py2exe-0.6.9-cp27-none-win32.whl

正常に動作しているか確認するため、簡単なソースをビルドしてみる。

python setup.py py2exe
py2exe_test.py
# -*- coding: utf-8 -*-

if __name__ == "__main__":
    print "hello"
setup.py
# -*- coding: utf-8 -*- 

from distutils.core import setup
import py2exe

option = {
    "compressed": 1,
    "optimize": 2,
    "bundle_files": 1
}

setup(
    options = {
        "py2exe": option
    },

    console = [
        {"script": "py2exe_test.py"}
    ],

    zipfile = None
)

どうやら正常に動作してるっぽい。

$> dist\py2exe_test.exe
hello

psycopg2

wininst2wheel psycopg2-2.5.2.win32-py2.7-pg9.2.6-release.exe

というコマンドで psycopg2-2.5.2-cp2.cp3-none-6_release.whl というファイルができた。
これを以下のコマンドでインストールする。

pip install psycopg2-2.5.2-cp2.cp3-none-6_release.whl

失敗した。

psycopg2-2.5.2-cp2.cp3-none-6_release.whl is not a supported wheel on this platform.
Storing debug log for failure in C:\Users\usename\pip\pip.log

エラーログを見る感じだと、サポート外のプラットフォームだからか?
とりあえずファイル名がほかの wheel と違うので合わせてみる -> psycopg2-2.5.2-cp2.cp3-none-any.whl とするとインストールに成功した。 psycopg2-2.5.2-cp2.cp3-none-win32.whl だとダメだった。謎。

python -c "import psycopg2"

は成功したので、とりあえず動作してるっぽい。念のため django で動くか確認してみる。

pip install "django==1.6.2"
python django-admin.py startproject psycopg2test
settings.py
"""
Django settings for psycopg2test project.

For more information on this file, see
https://docs.djangoproject.com/en/1.6/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/1.6/ref/settings/
"""

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/1.6/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '*%_gs%bq67g(1eer1yrl0fwya9et8a2=7p*c6afu6z$ke^-nbo'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

TEMPLATE_DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

ROOT_URLCONF = 'psycopg2test.urls'

WSGI_APPLICATION = 'psycopg2test.wsgi.application'


# Database
# https://docs.djangoproject.com/en/1.6/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': "DBNAME",
        'USER': "USERNAME",
        'PASSWORD': "PASSWORD",
    }
}

# Internationalization
# https://docs.djangoproject.com/en/1.6/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/

STATIC_URL = '/static/'

開発サーバーで動作することを確認できたので、問題ないっぽい。

pywin32

wininst2wheel pywin32-218.win32-py2.7.exe

というコマンドで pywin32-218-cp27-none-win32.whl というファイルができた。
これを以下のコマンドでインストールする。

pip install pywin32-218-cp27-none-win32.whl

一見インストールできたかに見えるが、 python -c "import win32api" とすると

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。

と表示されてしまう。これは pywintypes27.dllpythoncom27.dll がロードできないため。
pywin32-218.win32-py2.7.exe を直接実行する場合、管理者権限への昇格が必要となり、これらのDLLがシステムディレクトリにコピーされている。そのため問題なくインポートできる。この動作は pywin32_postinstall.py を管理者権限で実行すれば再現できるが、 virtualenv 環境なのにシステムディレクトリにDLLを配置するのは抵抗がある。とりあえず動作するのを目標にするのであれば、上記DLLを
%VENV_DIR%\Lib\site-packages\win32 にコピーすればよい。

11
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?