An exercise to create a Python package, build it, test it, distribute it, and use it. See instructions for details.
eatnyc is a lightweight Python package that recommends top-rated NYC restaurants based on cuisine, neighborhood, price, and rating.
It’s designed to help users explore the city’s dining scene and discover great places through data-driven recommendations — directly from the command line or in Python.
You can try out the latest build of eatnyc from the TestPyPI repository.
- Create and Activate a virtual environment
pipenv --python 3.11
pipenv shell- Install from TestPyPI Replace 0.1.0 with your latest version number (see pyproject.toml)
pipenv install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple eatnyc==0.1.0For now: The --extra-index-url flag ensures dependencies are installed from the real PyPI, while your package is pulled from TestPyPI
- Run the package You can use eatnyc either as a CLI app or a Python module.
eatnyc -n 5 --sort ratingpython -m eatnycfrom eatnyc import load_data, filter_restaurants, top_n, sample_dish, format_card
data = load_data()
# Filter restaurants by cuisine and neighborhood
italian_manhattan = filter_restaurants(
data,
cuisine="Italian",
neighborhood="Manhattan",
min_rating=4.0
)
# Get top 5 restaurants by rating
best = top_n(data, n=5, sort_by="rating")
# Show a sample dish recommendation
print(sample_dish(cuisine="Japanese"))
# Print formatted cards
for r in best:
print(format_card(r, style="ascii", width=48))Run the example:
pipenv run python examples/demo.pySimple unit tests are included in the 'tests' directory. To run them:
- Install 'pytest' inside your virtual environment:
pipenv install pytest- Run the tests from project root:
python3 -m pytest- All tests should pass. Any failed test indicates that the package code is behaving differently from the expected results.
pip install eatnycpipenv install -e .If that set up fails for you, use:
python3 -m pipenv install -e .If you modify the code and want to publish a new version to TestPyPI, follow these steps:
#1. CLEAN old build artifacts
rm -rf dist build src/*.egg-info
pipenv install build
#2. BUMP version number in pyproject.toml (e.g., 0.1.0 → 0.1.1)
#3. BUILD the package
pipenv run python -m build
#4. UPLOAD new version to TestPyPI
pipenv install twine
pipenv run twine upload -r testpypi dist/*- REINSTALL to test it:
pipenv run pip uninstall -y eatnyc
pipenv install -i https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple eatnyc==0.1.1- Once final, UPLOAD to real PyPI (final version) with:
pipenv run twine upload dist/*