46

package_fiddlerプロジェクトを仮想環境に正しくインストールできません。

私は、実行時に生成されるMANIFEST.in 非.pyファイルを配置する責任が Package_fiddler-0.0.0.tar.gzpython setup.py sdistあることを理解しました。

それから私はしました:

(virt_envir)$ pip install dist/Package_fiddler-0.0.0.tar.gz

しかし、これはデータファイルもパッケージもにインストールしませんでした/home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages

package_dataセットアップ引数の構成を何度も試しましたが、毎回間違った構成を使用したようですinclude_package_datadata_files

package_dataおよび/またはinclude_package_dataおよび/またはのどの構成が私の仮想環境にdata_files適切にインストールされますか?package_fiddler

プロジェクトツリー

.
├── MANIFEST.in
├── package_fiddler
│   ├── data
│   │   ├── example.html
│   │   └── stylesheets
│   │       └── example.css
│   └── __init__.py
├── README.rst
└── setup.py

setup.py

from setuptools import setup


setup(
    name='Package_fiddler',
    entry_points={
    'console_scripts': ['package_fiddler = package_fiddler:main', ],},
    long_description=open('README.rst').read(),
    packages=['package_fiddler',])

MANIFEST.in

include README.rst
recursive-include package_fiddler/data *

setup.pyのどの構成(上記のコードベースを使用)を試しましたか?

構成1

追加:

package_data={"": ['package_fiddler/data/*',]}

構成2

追加:

package_data={"": ['*.html', '*.css', '*.rst']}

構成3

追加:

include_package_data=True

構成4

追加:

package_data={"": ['package_fiddler/data',]}

削除:

packages=['package_fiddler',]

Configuration5(クリスの提案)

追加:

package_data={"data": ['package_fiddler/data',]}

削除:

packages=['package_fiddler',]

構成6

追加:

package_data={"": ['package_fiddler/data/*',]}

削除:

packages=['package_fiddler',]

これらの構成はすべて、にファイルがまったくインストールされないという結果になります/home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages

編集

倉富敏夫へのメモ:私の元の投稿では、わかりやすくするためにこの問題が発生する最も単純なツリー構造を使用しましたが、実際には、私のツリーは下のツリーのように見えます。そのツリーの場合、奇妙なことに__init__.py、フォルダ内stylesheetsのすべてのデータファイルtextsも正しくインストールされています。これは私を困惑させます。

ツリー2(これにより、すべてのデータファイルが適切にインストールされます!!)

.
├── MANIFEST.in
├── package_fiddler
│   │── stylesheets
|   |     ├── __init__.py
|   |     ├── example.css  
|   |     └── other
|   |          └── example2.css
|   |__ texts
|   |     ├── example.txt  
|   |     └── other
|   |          └── example2.txt
│   └── __init__.py
├── README.rst
└── setup.py
4

5 に答える 5

37

ここで私のために働く解決策を見つけました。

私がしたことを使用setuptools==2.0.2して:

setuptools.setup(
    ...
    packages=setuptools.find_packages(),
    include_package_data=True,  # use MANIFEST.in during install
    ...
)
于 2014-08-19T04:29:34.500 に答える
29

私は個人的に、setuptoolsが概念的にも実装的にもコードとデータを混合する方法が嫌いです。ここであなたをつまずかせているのはその実装だと思います。setuptoolsがpackage_dataを見つけて使用するには、データがpythonパッケージ内に存在する必要があります。__init__.pyPythonパッケージはディレクトリにすることができますが、ディレクトリにファイルが存在する必要があります。したがって、次の(空でも問題ありません)ファイルが必要なようです。

./package_fiddler/data/__init__.py
./package_fiddler/data/stylesheets/__init__.py
于 2012-11-09T20:01:35.753 に答える
13

「setup.py」にパッケージデータを含める最も簡単な方法は次のとおりです。

package_data = {'<package name>': ['<path to data file within package dir>']}

したがって、あなたの例では:

package_data = {'package_fiddler': ['data/*', 'data/stylesheets/*']}

package_dataキーがインストーラーに含まれるパッケージの名前である辞書です。これらのキーの下の値は、パッケージディレクトリ内の特定のファイルパスまたはグロブ/ワイルドカードのリストである必要があります。

また、フラグを含める必要があります。

zip_safe=False

データへのファイルシステムパスを解決できるようにしsetup(...)たい場合に。それ以外の場合pkg_resourcesは、これを行うために使用できます:http: //peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resources

「data」ディレクトリにファイルは絶対に必要ありません__init__.py。このディレクトリはモジュールではなく、インポートするためのものではありません。

于 2015-09-17T16:53:51.417 に答える
-2

使用する

package_data={"data": ['package_fiddler/data',]}

それ以外の

packages=['package_fiddler',]
于 2012-11-09T11:41:07.803 に答える
-2

これは私のために働きます。それが役に立てば幸い。

package_data={
    "package_fiddler": [
        '\*.\*',
        '\*/\*.\*',
        '\*/\*/\*.\*',
    ],
},
于 2016-12-28T22:42:15.757 に答える