2017-11-14 19 views
0

私はPythonモジュールを単一のeggファイルとして配布する方法を研究しています。私がmy_moduleと呼ばれるPythonモジュールを持っていて、私のモジュール用のeggファイルを生成するpythonスクリプトを書こうとしています。だから私はsetuptoolsを見つけた。eggファイルを作成してPythonでロードするにはどうすればよいですか?

from setuptools import setup 

setup(
    name="my_module", 
    packages=[my_package], 
    version="1.0", 
) 

そして、私は、これらの問題に関するいくつかの欠点を持っていたが:

  1. このスクリプトは、python setup.py installとして実行する必要があります。つまり、コマンドライン引数を指定する必要があります。その代わりに私は自分のeggfileをPythonコードの間に自動的に生成したいと思っています。それはコマンドライン引数を独自に制御しています。
  2. 結果ファイルは、セットアップのファイルディレクトリに出力されます。私は、スクリプトの出力ディレクトリのパスを制御したいと思います。
  3. 私が実際に必要としないbuilddistフォルダを作成します。おそらく、私はsetupを呼び出した後にフォルダを削除して解決することができます。

setuptoolsは、上記の問題をどのように扱うべきですか?

また、指定されたeggファイルからモジュールをロードするにはどうすればよいですか?私は、次のモジュール持っていると仮定すると


:私はcreage_egg.pyを実行したとき、私は、このようなエラーを取得し

# create_egg.py 

from setuptools import setup 

setup(
    name="my_module", 
    packages=['my_module'], 
    version="1.0", 
) 

# my_module.py 

class MyClass: 
    def __init__(self): 
     self._x = None 

    def set_x(self, x): 
     self._x = x 

    def get_x(self): 
     return self._x 

を私は卵のファイルを作成するには、このスクリプトを書いた

$ python3 create_egg.py 
usage: create_egg.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...] 
    or: create_egg.py --help [cmd1 cmd2 ...] 
    or: create_egg.py --help-commands 
    or: create_egg.py cmd --help 

error: no commands supplied 
+0

は、これは細かい質問ですが、このサイトのビット「広すぎます」。あなたが問題を切り出して、あなたが望むものを実装しようとしている間に特定の問題について質問すれば、より良い答えが得られます。 –

+0

@PauloScardineアドバイスをいただきありがとうございます。私はしばらくの間質問を修正します。 – Fomalhaut

答えて

1

最初t私が知っているヒンジは、パッケージがディレクトリでなければならないということです。だから、このような構造を維持する必要があります:

my_project/ 
    my_module/ 
     __init__.py 
    output/ 
    create_egg.py 
test_egg.py 

特別なオプションscript_argsがありますコマンドライン引数を指定することの必要性をスキップします。私はここでそれを見つけた:

http://peak.telecommunity.com/DevCenter/setuptoolsマイ__init__.py

class MyClass: 
    def __init__(self): 
     self._x = None 

    def set_x(self, x): 
     self._x = x 

    def get_x(self): 
     return self._x 

マイ create_egg.py

import os 
import shutil 
from setuptools import setup 


OUTPUT_DIR = 'output' 


if __name__ == "__main__": 
    setup(
     name="my_module", 
     packages=['my_module'], 
     version="1.0", 
     script_args=['--quiet', 'bdist_egg'], # to create egg-file only 
    ) 

    egg_name = os.listdir('dist')[0] 

    os.rename(
     os.path.join('dist', egg_name), 
     os.path.join(OUTPUT_DIR, egg_name) 
    ) 

    shutil.rmtree('build') 
    shutil.rmtree('dist') 
    shutil.rmtree('my_module.egg-info') 

マイtest_egg.py

import sys 
sys.path.append('my_project/output/my_module-1.0-py3.5.egg') 

import my_module 


obj = my_module.MyClass() 
obj.set_x(29) 
print(obj.get_x()) 

作成卵-ファイル:

~/Stuff/my_project $ python3 create_egg.py 
zip_safe flag not set; analyzing archive contents... 

テストモジュール:

~/Stuff $ python3 test_egg.py 
29 
+1

Stackoverflowは優れた[ラバーダック](https://en.wikipedia.org/wiki/Rubber_duck_debugging)です。 –

関連する問題