2016-07-15 14 views
3

モジュールを完成してパッケージ化したところです。私はドキュメントとこの質問packaging a python applicationを読んだことがありますが、インポートするパッケージがなくても、代わりに起動するスクリプトがある場合は、どのように進めるべきか分かりません。Pythonライブラリを実行可能ファイルでパッケージ化する

プロジェクトは、以下のようになります。

Project/ 
|-- README 
|-- requirement.txt 
|-- driver.py 
|-- run.py 
|-- module_1 
| |-- __init__.py 
| |-- class_1.py 
| |-- class_2.py 
|-- module 2 
|-- |-- __init__.py 
|-- |-- class_1.py 
|-- |-- class_2.py 

私はツールを起動するには:

python run.py arg1 --option arg2 

driver.pyは、他のすべてのモジュールをインポートし、Driverクラスといくつかの機能を定義します。 run.pydriver.pyをインポートし、引数を解析し、ロガーを設定し、他の関数の後に関数を呼び出してジョブを実行します。

setup.pyの設定についてはわかりませんが、ルートにはグローバル__init__.pyも必要ですか?私が理解していることから、import Projectの引数を持つスクリプトrun.pyを起動しないと実行できません。

他の情報からは、Driver.pyがパッケージであり、entry_pointsのオプションをsetup()としてください。しかし、私はそれをすべて正しく行う方法を理解していません。

ご協力いただきありがとうございます。

答えて

1

一般に、プロジェクト全体が1つのモジュールファイルに収まる場合にのみ、Pythonパッケージをモジュールとして配布します。プロジェクトがそれより複雑な場合は、通常、プロジェクトを__init__.pyファイルのパッケージとして構成することが最善です。ここで私はscripts/driver.pyにごrun.pyと改名し、以前driver.pyに持っていたコードが今driver/__init__.pyあるプロジェクトがパッケージに変換

Project/ 
|-- README 
|-- requirement.txt 
|-- setup.py 
|-- scripts/ 
| |-- driver.py 
|-- driver/ 
| |-- __init__.py 
| |-- module_1 
| | |-- __init__.py 
| | |-- class_1.py 
| | |-- class_2.py 
| |-- module_2 
| |-- |-- __init__.py 
| |-- |-- class_1.py 
| |-- |-- class_2.py 

どのように見えるかです。

あなたsetup.pyこの

from setuptools import setup. find_packages 

setup(
    name='driver', 
    version='1.0', 
    packages=find_packages(), 
    scripts=['scripts/driver.py'], 
) 

のようになります。これは、Pythonスクリプトディレクトリにscripts/driver.pyをコピーします。 run.pydriver.pyに変更しました。runはかなり一般的で、すべてのPythonパッケージが同じスクリプトの場所を共有するため、スクリプト名を一意にする必要があります。

また、console_scriptsエントリポイントを使用することもできます。この場合、別のscripts/driver.pyスクリプトはありません。代わりに、パッケージ内に関数があるだけです。この場合、すべてのコードをscripts/driver.pyからdriver/command_line.pyに移動して、main()という関数の中に入れることができます。そして、また、この

setup(
    name='driver', 
    version='1.0', 
    packages=find_packages(), 
    entry_points = { 
     'console_scripts': ['driver=driver.command_line:main'], 
    } 
) 

にごsetup.pyを変更するには、this docs page on python packagingをお読みください。これは、基本と多くの一般的な使用例をカバーしています。

+0

ありがとうございます@アベル、これは今私には明らかです!月曜日仕事でこれを試してみよう!あるソリューションを他のソリューションよりも使用する利点はありますか?まず最初は、私が推測するようにはっきりしているようです。 – Y0da

関連する問題