57

というプロジェクトがprojあり、このプロジェクトには次の構造があるとします。

proj/
  dists/
  doc/
  src/
    __init__.py
    xyz.py
    abc.py
  test/
  setup.py

ご覧のとおり、プロジェクトのすべてのコンテンツはsrcサブフォルダーにあります。srcフォルダーから distutils 配布パッケージを作成するにはどうすればよいですか?

私の素朴な考えは、チュートリアルに従って、次のように書くことでしたsetup.py:

#omitting basics
setup(
   name='proj',
   packages=['src'],
   package_dir={'proj':'src'}
)

しかし、結果のパッケージをシステムにインストールした後でも、インポートする必要がsrc.xyzありproj.xyz、それが目標であり、期待される結果でした。

4

6 に答える 6

21

Python パッケージ ファイルをproj/ディレクトリに配置することで修正できます。

proj/
  src/
    proj/
      __init__.py
      xyz.py
      abc.py
  setup.py

そして次のように変更setup.pyします:

# ...
setup(
   name='proj',
   packages=['proj'],
   package_dir={'':'src'}
)

distutils では必要ありませんが、他のツールでは、__init__.pyファイルの親ディレクトリ名が Python パッケージ名と同じであると想定される場合があります。つまり、projこの場合です。

于 2013-01-20T02:37:52.020 に答える
18

これは、https ://github.com/pypa/setuptools/issues/250 で報告された setuptools のバグによるものです。

基本的には動作しますが、開発モードでは動作しません。これで、3 つのソリューションが得られます。

  • srcパッケージを次のようにシンボリックリンクしますproj(コミットするときは無視します)。そのままで動作しますが、汚れています
  • srcからに変更proj
  • projにサブディレクトリを作成しsrc、次のオプションを使用します。
パッケージ=['プロジェクト']、
package_dir={'proj': 'src/proj'},
于 2016-03-15T13:33:20.267 に答える
-5

関数を呼び出す前に、srcフォルダーをに追加してみてください。PYTHONPATHsetup

import sys, os
src_path = os.path.join(os.path.realpath(os.path.dirname(__file__)), 'src')
sys.path.append(src_path)

また、念のため、作業ディレクトリを変更します。

os.chdir(src_path)

その後、すべて問題ないはずです。

アプリをパッケージ化するための他のいくつかのツールは、内部からサポートしています。setuptools だと思っていたのですが、PyInstaller であることがわかりました。しかし、基本的には、パッケージを直接インポートするだけで十分です。

distutils にはpackage_dirディレクティブがあることがわかりました。これを使用する必要がありますがパッケージを .xml ファイルに追加するだけで機能する場合がありますPYTHONPATH

于 2013-01-20T01:52:11.850 に答える