1

ソースとコンパイル済みバイナリの両方を含める必要がある Python ディストリビューションを作成しようとしています。(はい、追加することに対する/追加するための引数を読みまし.pycたが、私の使用例では.pyc追加する必要があります)。Windows で手順を実行すると、ソース バイナリとコンパイル済みバイナリの両方が出力ファイルに追加されます (私は と の両方を使用sdistしましたbdist_wheel)。

次の構造があるとします。

root
+--folderA
   +--alpha
   +--beta
   +--__init__.py
+--folderB

folderAfolderBサブディレクトリ内に他のファイルが含まれている間、ソースコードが含まれています。

完了した手順:

  1. モジュールは次を使用してコンパイルされますcompileall
  2. のソースalphaは削除されます。のソースbetaは保持されます。
  3. 走るpython setup.py sdist|bdist_wheel

find_packages()モジュールを検出するために setup.py で使用しました。内のモジュールは検出されますが、内のモジュールalphaは検出されませんbeta

Windowsの結果.tgz.whlファイルには、必要なすべてのファイルがあります。すべてが良いです。

ただし、Linux (具体的には Ubuntu) で同じ手順を実行すると、 のモジュールのみbetaが追加され、いくつかのモジュールが追加されfolderBますが、異なるタイプの他のファイルと module は追加されませんalphasdistソース while のみbdistbdist_wheel提供し、.pycs のみを提供します。sdistこれはソース ファイルを配布するためのものでbdistあり、バイナリ ファイルを配布するためのものであると理解しています。

私の質問は、Windows で動作が異なるのはなぜですか? Linux で同じ出力を生成することは可能ですか (ソースおよび.pyc他のファイルと共に)?

Python 2.7 を使用しています。

4

1 に答える 1

2

ファイルを sdist に含めるには、ファイルをMANIFEST.inに追加します。

global-include *.py *.pyc

*.pycLinux では、特別な設定をしなくても、wheels に含めることができます。

python setup.py build
python -m compileall build
python setup.py sdist
python setup.py bdist_wheel

PS。ソースを人々から隠そうとしているのなら、あなたは間違った方向に進んでいます。*.pycファイルを逆コンパイルできます。標準ライブラリには逆アセンブラがあり、そこには多くの逆コンパイラとアンコンパイラがあります。

于 2018-01-22T12:37:59.623 に答える