2009-05-01 14 views
9

distutilsでPythonディストリビューションをビルドしようとしています。残念ながら、私のディレクトリ構造は次のようになります。私のsetup.pyにファイルへの相対パスを使用させるには?

 
/code 
    /mypackage 
     __init__.py 
     file1.py 
     file2.py 
     /subpackage 
      __init__.py 
    /build 
     setup.py 

は、ここに私のsetup.pyファイルです:

from distutils.core import setup 

setup(
    name = 'MyPackage', 
    description = 'This is my package', 
    packages = ['mypackage', 'mypackage.subpackage'], 
    package_dir = { 'mypackage' : '../mypackage' }, 
    version = '1', 
    url = 'http://www.mypackage.org/', 
    author = 'Me', 
    author_email = '[email protected]', 
) 

私はpython setup.py sdistを実行すると、それは正しくマニフェストファイルを生成しますが、配信で私のソースファイルが含まれていません。 。どうやら、ソースファイルを格納するディレクトリ(つまりmypackage1)を作成し、ソースファイルのそれぞれをmypackage1/../mypackageにコピーして、を配布のの外側にコピーします。

distutilsが想定しているディレクトリ構造に強制することなく、これを修正するにはどうすればよいですか?

答えて

0

私はおそらく、rsynced ./mypackageに./build/mypackageというメークファイルを使用して、通常の./buildのdistutils構文を使用します。事実、distutilsはsetup.pyをsdistのルートに解凍してそこにコードを置くことを期待しています。そうすれば、あなたはそれがそうでないと確信する時間の悪魔を持つでしょう。

あなたはあなたがあなたのvcsを台無しにする必要はありませんので、きれいにすると、いつでもコピーを中傷することができます。

4

配布アーカイブファイルの内部には、どのようなディレクトリ構造が必要ですか?あなたの既存の構造と同じですか?

あなたはこの修正setup.pyをすべて一つのディレクトリが高い(あなたの例ではcode)をパッケージ化することができます:

from distutils.core import setup 

setup(
    name = 'MyPackage', 
    description = 'This is my package', 
    packages = ['mypackage', 'mypackage.subpackage'], 
    version = '1', 
    url = 'http://www.mypackage.org/', 
    author = 'Me', 
    author_email = '[email protected]', 
    script_name = './build/setup.py', 
    data_files = ['./build/setup.py'] 
) 

あなたは(codeディレクトリに)これを実行したい:

python build/setup.py sdist 

または、distをビルド内に保存する場合:

python build/setup.py sdist --dist-dir build/dist 

私はあなたが試みているディレクトリ構造が好きです。私はsetup.pyがルートコードフォルダにあることを保証するのに十分なものだと決して考えなかった。しかし、そうであってもそうでなくても、あなたの流通のユーザーはそれが期待される場所だと私は考えます。それで、あなたが何か他のことをするためにdistutilsを騙さなければならないことは驚くことではありません。 data_filesパラメータは、あなたが配置したのと同じ場所であなたのsetup.pyを配布物に入れるためのハックです。

+5

easy_installを使ってユーザーが試してインストールしようとしたときに正しいことをしている限り、配布ファイルの構造はどうでも構いません。しかし、Pythonのドキュメンテーションは、これらの詳細について言えば、まったく恐ろしいものです。構造がどのように見えているかわかりません。そして、私はまだ配布物をインストールするためにインストールされる前に、あなたが配布物でスクリプトを実行するというアイデアに頭をはめています。 –

0

親ディレクトリに最初に変更しましたか?など

import os.path 
my_path = os.path.abspath(__file__) 
os.chdir(os.normpath(os.path.join(my_path, os.pardir))) 

ない、これは動作しますが、する必要がありますを確認します。

import os 
os.chdir(os.pardir) 

from distutils.core import setup 

など

それとも、(これはやり過ぎですが...)どこからでも、それを実行している可能性がある場合試してみるのは簡単です。

1

セットアップを実行します。プロジェクトのルートフォルダ、あなたの場合は

からPY、コード内の場所のsetup.py/

コード/も含める必要があります。

  • LICENSE.TXT
  • のREADME.txt
  • install.txtを
  • TODO.txt
  • CHANGELOG.txt

ザ・をあなたは「setup.py sdistの」を実行し、それはすべき自動GEN含むMANIFEST: - setup.py - - のREADME.txt

へpy_modulesおよび/またはパッケージ で指定されたファイルさらに多くのファイルを追加すると、MANIFESTファイルを手動で編集するだけで、プロジェクトに必要な他のファイルを含めることができます。

これはややまともな説明のためread thisです。

実例のチェックアウトmy projectを参照してください。

注:バージョンコントロールの下にMANIFESTを置かないので、そこには見つかりません。

0

また、回避策がありますが、ビルドプロジェクト内のパッケージディレクトリのジャンクション/リンクが機能するはずです。

関連する問題