Ben*_*ey4 42 python packaging setuptools setup.py
我无法将项目正确安装package_fiddler
到我的虚拟环境中.
我已经发现,MANIFEST.in
负责将non.py文件放在Package_fiddler-0.0.0.tar.gz
执行时生成的文件中 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
Run Code Online (Sandbox Code Playgroud)
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',])
Run Code Online (Sandbox Code Playgroud)
MANIFEST.in
include README.rst
recursive-include package_fiddler/data *
Run Code Online (Sandbox Code Playgroud)
配置1
添加:
package_data={"": ['package_fiddler/data/*',]}
Run Code Online (Sandbox Code Playgroud)
Configuration2
添加:
package_data={"": ['*.html', '*.css', '*.rst']}
Run Code Online (Sandbox Code Playgroud)
Configuration3
添加:
include_package_data=True
Run Code Online (Sandbox Code Playgroud)
Configuration4
添加:
package_data={"": ['package_fiddler/data',]}
Run Code Online (Sandbox Code Playgroud)
删除:
packages=['package_fiddler',]
Run Code Online (Sandbox Code Playgroud)
配置5(克里斯的建议)
添加:
package_data={"data": ['package_fiddler/data',]}
Run Code Online (Sandbox Code Playgroud)
删除:
packages=['package_fiddler',]
Run Code Online (Sandbox Code Playgroud)
配置6
添加:
package_data={"": ['package_fiddler/data/*',]}
Run Code Online (Sandbox Code Playgroud)
删除:
packages=['package_fiddler',]
Run Code Online (Sandbox Code Playgroud)
这些配置都导致根本没有安装任何文件/home/username/.virtualenvs/virt_envir/local/lib/python2.7/site-packages
.
Toshio Kuratomi的注意事项:在我的原始帖子中,我使用了最简单的树结构,为了清楚起见出现了这个问题,但实际上我的树看起来更像下面的树.对于那棵树,奇怪的是,如果我只是__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
Run Code Online (Sandbox Code Playgroud)
war*_*iuc 33
研究发现,工作了我一个解决方案在这里.
用setuptools==2.0.2
我做了:
setuptools.setup(
...
packages=setuptools.find_packages(),
include_package_data=True, # use MANIFEST.in during install
...
)
Run Code Online (Sandbox Code Playgroud)
小智 27
我个人不喜欢setuptools在概念和实现方面混合代码和数据的方式.我认为正是这种实施让你绊倒了.对于setuptools来查找和使用package_data,它需要将数据驻留在python包中.python包可以是目录,但目录中需要有一个__init__.py
文件.所以看起来你需要以下(空的很好)文件:
./package_fiddler/data/__init__.py
./package_fiddler/data/stylesheets/__init__.py
Run Code Online (Sandbox Code Playgroud)
Leo*_*Leo 12
在"setup.py"中包含包数据的最简单方法是这样的:
package_data = {'<package name>': ['<path to data file within package dir>']}
Run Code Online (Sandbox Code Playgroud)
所以在你的例子中:
package_data = {'package_fiddler': ['data/*', 'data/stylesheets/*']}
Run Code Online (Sandbox Code Playgroud)
package_data
是一个字典,其中键是安装程序中包含的软件包的名称.这些键下的值应该是包目录中特定文件路径或globs /通配符的列表.
您还需要包含标志:
zip_safe=False
Run Code Online (Sandbox Code Playgroud)
在setup(...)
如果你希望能够解决文件系统路径到您的数据.否则你可以pkg_resources
这样做:http://peak.telecommunity.com/DevCenter/PythonEggs#accessing-package-resources
您绝对不需要__init__.py
"data"目录中的文件 - 该目录不是模块,也不是要导入的.
归档时间: |
|
查看次数: |
12792 次 |
最近记录: |