42

项目树:

$.
├── happy_birthday-art.txt
├── happy_birthday.py
├── MANIFEST.in
├── README.rst
└── setup.py

安装程序.py

from setuptools import setup

setup(
    name='Happy_birthday',
    py_modules=['happy_birthday'],
    data_files=['happy_birthday-art.txt'],
    entry_points={
    'console_scripts': ['happy_birthday = happy_birthday:main', ],},
    long_description=open('README.rst').read(),
)

现在,当我这样做python setup.py sdist,然后在虚拟环境pip install中创建.tar.gz文件时,我收到以下消息:

warning: install_data: setup script did not provide a directory for 'happy-birthday-art.txt' -- installing right in '/home/username/.virtualenvs/happy_birthday'

该程序使用该 .txt 文件,因此在之后尝试运行它时会失败。

但我不想安装happy_birthday-art.txt到单独的文件夹中。我想将它安装在安装的文件夹中happy_birthday.py。另外,我不想在setup.py. 如何最好地设置我的setup.py文件?

4

2 回答 2

28

如果您有这样的单文件模块,则不会创建文件夹,您的.py文件将直接移动到包含其他 python 模块的目录中(/usr/lib/pythonX.X/site-packages/例如)。这就是为什么你必须创建一个目录:

$ .
|-- happy_birthday/
    |-- __init__.py
    |-- art.txt
|-- MANIFEST.in
|-- README.rst
|-- setup.py
于 2012-09-17T15:04:18.170 回答
7

http://docs.python.org/2/distutils/setupscript.html

“您可以将 data_files 选项指定为简单的文件序列,而无需指定目标目录,但不建议这样做,在这种情况下 install 命令会打印警告。要直接在目标目录中安装数据文件,请使用空字符串应该作为目录给出。”

但是,这里的目标目录不是 site-packages 文件夹,而是前缀文件夹,即 venv 的根目录。如果您希望 .txt 驻留在 site-packages 目录中,那么它不仅看起来很难看,而且似乎真的不受支持。另一方面,可以将它安装到环境中的另一个位置,例如在“share/doc/foo”中:

data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],
于 2013-07-31T06:49:05.177 回答