Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Setting up setup.py for packaging of a single .py file and a single data file without needing to create any folders

Project tree:

$. ├── 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(), ) 

Now when I do python setup.py sdist and then pip install the created .tar.gz file in a virtual environment I get the following message:

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

The program uses that .txt file so it fails when trying to run it afterwards.

But I don't want to install happy_birthday-art.txt into a separate folder. I want to install it in the folder where happy_birthday.py is installed. Also, I don't want to have to use absolute paths in setup.py. How do I best set up my setup.py file?

like image 798
Bentley4 Avatar asked Sep 17 '12 14:09

Bentley4


People also ask

How do I create a Python package using setup py?

Installing Python Packages with Setup.py To install a package that includes a setup.py file, open a command or terminal window and: cd into the root directory where setup.py is located. Enter: python setup.py install.

How do I include a file in a Python package?

Place the files that you want to include in the package directory (in our case, the data has to reside in the roman/ directory). Add the field include_package_data=True in setup.py. Add the field package_data={'': [... patterns for files you want to include, relative to package dir...]} in setup.py .


1 Answers

If you have a single-file module like this, no folder will be created, your .py file will be moved directly into the directory which contains the other python modules (/usr/lib/pythonX.X/site-packages/, for example). That's why you have to create a directory:

$ . |-- happy_birthday/     |-- __init__.py     |-- art.txt |-- MANIFEST.in |-- README.rst |-- setup.py 
like image 180
Markus Unterwaditzer Avatar answered Sep 21 '22 14:09

Markus Unterwaditzer