この `setup.py`の何が問題になっていますか?
-
06-07-2019 - |
質問
setup.py
を取得して sdist
を正しく実行するのに問題があります。これまで煮詰めました。次のディレクトリ構造を持っています:
my_package\
my_subpackage\
__init__.py
deep_module.py
__init__.py
module.py
setup.py
そして、これが setup.py
にあるものです:
#!/usr/bin/env python
from distutils.core import setup
import distutils
setup(
name='a',
version='0.1',
description='a',
author='a',
author_email='a@a.com',
url='http://a.org',
packages=['my_package','my_package.my_subpackage'],
package_dir={'': '..'},
license= "a",
long_description = 'aaa',
)
( 'aaa'
は単なるプレースホルダーです。)
とにかく、 setup.py install
を実行しても問題ありませんが、 setup.py sdist
を実行しようとすると、いくつかの奇妙なことが起こります:
-
MANIFEST
ファイルが作成されます。 -
my_package
フォルダーのコピーが、既存のmy_package
フォルダーの内部に作成されます(ただし、一部のセットアップ-関連ファイルだと思います。) -
dist
フォルダーが作成され、その中にzipファイルがあり、その中にパッケージ名のあるフォルダーがありますが、そのフォルダーの中には希望どおりのパッケージ全体ではなく、2つだけがありますファイル、setup.py
およびPKG-INFO
。
間違っているのは何ですか? sdist
を機能させるにはどうすればよいですか?
解決
これの代わりに:
my_package\
my_subpackage\
__init__.py
deep_module.py
__init__.py
module.py
setup.py
これを試してください:
my_package_source\
setup.py
README.txt
my_package\
my_subpackage\
__init__.py
deep_module.py
__init__.py
module.py
実際にREADMEは必要ありません。プロジェクトのフォルダーのルートディレクトリにあるものを説明するためのものです。
=== EDIT ======================================
詳しく説明します。実行後、ディレクトリは次のようになります。
my_package_source\
setup.py
README.txt
MANIFEST
PKG-INFO
dist\
my_package_0.X.tar.gz (or .zip on windows I believe)
my_package\
my_subpackage\
__init__.py
deep_module.py
__init__.py
module.py
distディレクトリの下のパッケージを使用して配布します。
他のヒント
問題の詳細な説明ここ:
Setuptoolsには多くのサイレント障害があります モード。それらの1つは失敗です sdistリリースにすべてのファイルを含める (まさしく失敗ではありません。 RTFM、ただしデフォルトの動作は 予想外)。この投稿は これに対するgoogle-yourself-answer 問題、私たちが新しく輝くまで、 私たちのすべてを解決する配布 問題。
コメントが指摘しているように、バグ(misdesign)は実際にはdistutilsにあります-setuptoolsは修正に失敗します(svnを使用している場合、実際には少し改善されています)。
問題を観察しながら再現することができます。つまり、ファイル名を少し短くすることです。
$ ls -lR
total 8
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 4 aleax eng 136 Oct 24 11:25 mysub
-rw-r--r-- 1 aleax eng 323 Oct 24 11:26 setup.py
./mysub:
total 0
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 deepmod.py
そして python setup.py sdist
を実行すると(警告も)生成されます:
$ ls -lR
total 16
-rw-r--r-- 1 aleax eng 104 Oct 24 11:35 MANIFEST
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
drwxr-xr-x 3 aleax eng 102 Oct 24 11:35 dist
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 5 aleax eng 170 Oct 24 11:35 mypack
drwxr-xr-x 4 aleax eng 136 Oct 24 11:25 mysub
-rw-r--r-- 1 aleax eng 323 Oct 24 11:26 setup.py
./dist:
total 8
-rw-r--r-- 1 aleax eng 483 Oct 24 11:35 a-0.1.tar.gz
./mypack:
total 0
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 4 aleax eng 136 Oct 24 11:35 mysub
./mypack/mysub:
total 0
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 deepmod.py
./mysub:
total 0
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 2 aleax eng 0 Oct 24 11:25 deepmod.py
1つの解決策は、ディレクトリレイアウトを次のように変更することです(現在のmypackディレクトリから):
$ mkdir mypack
$ mv __init__.py modu.py mysub/ mypack
$ touch README.txt
so getting:
$ ls -lR
total 8
-rw-r--r-- 1 aleax eng 0 Oct 24 11:37 README.txt
drwxr-xr-x 5 aleax eng 170 Oct 24 11:37 mypack
-rw-r--r-- 1 aleax eng 323 Oct 24 11:26 setup.py
./mypack:
total 0
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 modu.py
drwxr-xr-x 4 aleax eng 136 Oct 24 11:25 mysub
./mypack/mysub:
total 0
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 __init__.py
-rw-r--r-- 1 aleax eng 0 Oct 24 11:25 deepmod.py
(および警告の1つ、READMEに関する警告-MANIFEST.inの欠落に関する警告は明らかに残っています;-)。また、setup.pyの1行を次のように変更します。
package_dir={'': '.'},
今、 python setup.py sdist
の後、まともなtarballが得られます:
$ tar tvf dist/a-0.1.tar.gz
drwxr-xr-x aleax/eng 0 2009-10-24 11:40:05 a-0.1/
drwxr-xr-x aleax/eng 0 2009-10-24 11:40:05 a-0.1/mypack/
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/__init__.py
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/modu.py
drwxr-xr-x aleax/eng 0 2009-10-24 11:40:05 a-0.1/mypack/mysub/
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/mysub/__init__.py
-rw-r--r-- aleax/eng 0 2009-10-24 11:25:30 a-0.1/mypack/mysub/deepmod.py
-rw-r--r-- aleax/eng 156 2009-10-24 11:40:05 a-0.1/PKG-INFO
-rw-r--r-- aleax/eng 0 2009-10-24 11:37:41 a-0.1/README.txt
-rw-r--r-- aleax/eng 322 2009-10-24 11:39:46 a-0.1/setup.py
もちろん、マニフェストファイルは現在のディレクトリに作成されますが、それが問題にならないことを願っています。