2016-06-30 12 views
1

私はpythonプロジェクトを持っていますが、これにはsetup.pyファイルがあります。今ではpython setup.py bdist_rpmを使ってrpmを作成することができます。 pipを使っていくつかのpython依存関係をインストールしました。私は別のマシン/ホストになった回転数を取るとき今、私はいくつかのPythonパッケージ関連のエラーを取得しています、のように:pythonプロジェクトのrpmを作成するには

pkg_resources.DistributionNotFound: The 'enum34<2,>=1.0.4' distribution was not found and is required by xyz 

誰もがこの問題を解決するためにどのように任意のアイデアを持っていますか? bdist_rpmを使用しているのは、pythonプロジェクトのrpmを作成する最も良い方法ですか? rpm自体のすべての依存関係を静的にバインドするために何か他のものを使うべきですか?

編集:追加setup.py

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
from __future__ import absolute_import 
from __future__ import unicode_literals 

import codecs 
import os 
import re 
import sys 

from setuptools import find_packages 
from setuptools import setup 


def read(*parts): 
    path = os.path.join(os.path.dirname(__file__), *parts) 
    with codecs.open(path, encoding='utf-8') as fobj: 
     return fobj.read() 


def find_version(*file_paths): 
    version_file = read(*file_paths) 
    version_match = re.search(r"^__version__ = ['\"]([^'\"]*)['\"]", 
           version_file, re.M) 
    if version_match: 
     return version_match.group(1) 
    raise RuntimeError("Unable to find version string.") 


install_requires = [ 
    'cached-property >= 1.2.0, < 2', 
    'docopt >= 0.6.1, < 0.7', 
    'PyYAML >= 3.10, < 4', 
    'requests >= 2.6.1, < 2.8', 
    'texttable >= 0.8.1, < 0.9', 
    'websocket-client >= 0.32.0, < 1.0', 
    'docker-py >= 1.8.1, < 2', 
    'dockerpty >= 0.4.1, < 0.5', 
    'six >= 1.3.0, < 2', 
    'jsonschema >= 2.5.1, < 3', 
] 


tests_require = [ 
    'pytest', 
] 


if sys.version_info[:2] < (3, 4): 
    tests_require.append('mock >= 1.0.1') 
    install_requires.append('enum34 >= 1.0.4, < 2') 


setup(
    name='docker-compose', 
    version=find_version("compose", "__init__.py"), 
    description='Multi-container orchestration for Docker', 
    url='https://www.docker.com/', 
    author='Docker, Inc.', 
    license='Apache License 2.0', 
    packages=find_packages(exclude=['tests.*', 'tests']), 
    include_package_data=True, 
    test_suite='nose.collector', 
    install_requires=install_requires, 
    tests_require=tests_require, 
    entry_points=""" 
    [console_scripts] 
    docker-compose=compose.cli.main:main 
    """, 
    classifiers=[ 
     'Development Status :: 5 - Production/Stable', 
     'Environment :: Console', 
     'Intended Audience :: Developers', 
     'License :: OSI Approved :: Apache Software License', 
     'Programming Language :: Python :: 2', 
     'Programming Language :: Python :: 2.7', 
     'Programming Language :: Python :: 3', 
     'Programming Language :: Python :: 3.4', 
    ], 
) 
+0

おそらく、あなたはsetup.pyファイルの内容を投稿するべきです。それはとても良く見えないからです。 –

+0

@ChrisMaes質問を編集しました。 – Pensu

+0

作成したrpmはどのようにインストールしますか? 'rpm'、' zypper'などを使用していますか?私はすべてのメッセージが言っていると思う:あなたは依存関係がインストールされていない。インストールされていることを確認する必要があります。正しいリポジトリでzypperを使用している場合。ジッパーがあなたのためにそれを世話します。 (または 'yum') –

答えて

0

ヨルダンシセルのFPMプロジェクトは、異なるソース・タイプの束からRPM/DEBを作るための本当に便利で、Pythonが含まれています。これに関するいくつかの指示については、wiki page for pythonをご覧ください。依存関係を処理するのにも優れています。

+0

提案してくれてありがとうございますが、依存関係を静的にインストールして、次のマシンでもう一度やり直す必要はありません。それを行う方法はありますか? – Pensu

+0

私は少し前にこのハックをしていましたが(https://gist.github.com/boyvinall/1349b056c6d1c730ae1ffe440d5aa918)、思ったよりもやっかいでした。私はすべてを1つのRPMにバンドルするのではなく、必要な依存パッケージも利用できるようにして、このパッケージをインストールするときにインストールされるようにします。ディストリビューションが提供するものと同じパッケージ名を使用していることを確認してください。 – boyvinall

1

pythonパッケージを生成するためにpyp2rpmを強くお勧めします。

統計的にリンクされたモジュール - それはバンドリングと呼ばれ、悪いです。あなたは遅かれ早かれそれを後悔します。配布されていない依存関係を使用したい場合は、https://copr.fedorainfracloud.org/coprs/g/copr/PyPI2/ を使用してください。多くのPyPIモジュールがRPMとしてパッケージされています。

+0

は、前に見たことがない、素敵に見えます:) – boyvinall

関連する問題