find_packages () не включает основную папку проекта - PullRequest
1 голос
/ 29 марта 2020

У меня проблемы с исключением файлов в файле setup.py. Сначала я показываю структуру проекта.

myscript
├── myscript
│   ├── tests.py
│   └── myscript.py
├── README.md
├── LICENSE
└── setup.py

Содержимое файла setup.py выглядит следующим образом:

# -*- coding: utf-8 -*-
from setuptools import setup, find_packages

with open('README.md') as f:
    long_description = f.read()

setup(name = 'myscript',
    version = "1.0",
    description = 'Example desc',
    long_description = long_description,
    long_description_content_type = 'text/markdown; charset=UTF-8',
    license = 'MIT',
    author = 'Jalkhov',
    author_email = 'jalkhov@gmail.com',
    packages = find_packages('myscript', exclude=['tests.py']),   
    entry_points={
        'console_scripts': [
            'myscript=myscript.myscript:main',
        ],
},
)

Когда я запускаю python setup.py sdist с таким файлом, и установите файл .tar.gz , который он сгенерировал для меня, он устанавливается правильно, но когда я пытаюсь запустить скрипт из консоли, он выдает мне следующую ошибку:

File "C:\Users\myuser\AppData\Local\Programs\Python\Python37-32\Scripts\myscript.exe.main__.py", line 4, in <module>ModuleNotFoundError: No module named 'myscript'

Затем я проверяю папку site-packages, и единственное, что касается сценария, который я нахожу, это папка myscript-1.0.dist-info

Но когда я изменяю строку пакета и оставляю ее так:

packages = ["myscript"],

И я устанавливаю, все работает нормально, но файл, который я хочу исключить, был включен в папку site-packages.

Кажется, что при использовании функции find_packages меня не волнует Основная папка скрипта.

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

У вас вообще нет пакета, поэтому не используйте find_packages. Вместо этого используйте py_modules для создания одного файла.

Порекомендуйте макет проекта следующим образом:

myscript
├── LICENSE
├── README.md
├── myscript.py
├── setup.py
└── tests
    └── test_myscript.py

И измените setup.py следующим образом:

setup(
    ...
    py_modules=["myscript"],
)
1 голос
/ 30 марта 2020

Похоже, что myscript/myscript/__init__.py файл отсутствует.

В любом случае, find_packages() обходит целевой каталог, фильтрует по шаблонам включения и находит Python пакетов (любой каталог). Пакеты распознаются, только если они содержат файл __init__.py. Наконец, шаблоны исключения применяются для удаления соответствующих пакетов.

- setuptools документация для find_packages

...