質問

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 を実行しようとすると、いくつかの奇妙なことが起こります:

  1. MANIFEST ファイルが作成されます。

  2. my_package フォルダーのコピーが、既存の my_package フォルダーの内部に作成されます(ただし、一部のセットアップ-関連ファイルだと思います。)

  3. 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

もちろん、マニフェストファイルは現在のディレクトリに作成されますが、それが問題にならないことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top