建立一个单一的.py文件,单个数据文件的包装setup.py,而不需要创建任何文件夹(Setting

2019-07-31 15:56发布

项目树:

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

setup.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文件?

Answer 1:

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

$ .
|-- happy_birthday/
    |-- __init__.py
    |-- art.txt
|-- MANIFEST.in
|-- README.rst
|-- setup.py


Answer 2:

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

“你可以指定data_files选项文件的一个简单的顺序没有指定一个目标目录,但不建议这样做,并安装命令将在这种情况下打印一个警告。要直接在目标目录中安装数据文件,一个空字符串应给予作为目录“。

然而,这里的目标目录不是站点包文件夹,但前缀的文件夹,即VENV的根源。 如果你想要的.TXT驻留在站点包目录光秃秃的,那么它看起来不仅难看,但似乎真的不支持。 在另一方面,可以将其安装到另一个位置,在ENV,例如在“共享/ DOC / foo”的:

data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],


文章来源: Setting up setup.py for packaging of a single .py file and a single data file without needing to create any folders