仮想環境にプロジェクトpackage_fiddler
を適切にインストールできません。
MANIFEST.in
は、Package_fiddler-0.0.0.tar.gz
の実行時に生成される非.pyファイルをpython 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_data
、data_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 *
構成1
追加:
package_data={"": ['package_fiddler/data/*',]}
構成2
追加:
package_data={"": ['*.html', '*.css', '*.rst']}
構成
追加:
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
にファイルがインストールされません。
Toshio Kuratomiへの注意:私の元の投稿では、わかりやすくするためにこの問題が発生する最も単純なツリー構造を使用しましたが、実際には私のツリーは以下のツリーに似ています。そのツリーでは、奇妙なことに、stylesheets
に__init__.py
のみを配置すると、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
Setuptoolsがコードとデータを概念的および実装的に混合する方法は個人的に嫌いです。ここであなたをつまずかせているのはその実装だと思います。 setuptoolsがpackage_dataを検索して使用するには、データがpythonパッケージ内に存在する必要があります。pythonパッケージはディレクトリでもかまいませんが、 __init__.py
ディレクトリ内のファイル。したがって、次の(空でもかまいません)ファイルが必要なようです。
./package_fiddler/data/__init__.py
./package_fiddler/data/stylesheets/__init__.py
私のために働いた解決策を見つけた here 。
setuptools==2.0.2
の使用:
setuptools.setup(
...
packages=setuptools.find_packages(),
include_package_data=True, # use MANIFEST.in during install
...
)
「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
_ファイルは必要ありません。このディレクトリはモジュールではなく、インポートするためのものではありません。