Вопрос по python, setup.py, install, distutils – Можно ли включить подкаталоги, используя dist utils (setup.py) как часть данных пакета?

22

В основном мой пакет на python настроен так:

module
\_examples
  \_folder1
     \_file1.py
     \_file2.py
  \_folder2
    \_file1.py
    \_file2.py

В основном я хочу просто использовать:

package_data  = { 
            'module': ['examples/*'],
  },

потому что в моем проекте всегда есть люди, добавляющие примеры, и я хочу, чтобы их было легко перечислить из моего приложения. Я могу заставить его работать для любого ФАЙЛА в примерах, но не прокручивать через подкаталоги. Это возможно?

Ваш Ответ

5   ответов
1

MANIFEST.in файл для этого.

Я полагаю, что вам понадобится что-то вроде этого:

$ cat MANIFEST.in
recursive-include examples/ *.py
Хм, мне придется попробовать, как я это делал: recursive-include examples * .py и не использовал /. Я читал, что MANIFEST.in считается устаревшим. Я думаю, что мне, возможно, придется просто следовать методу вызова функции python. xamox
Я думаю, что вы также можете напрямую использовать функции Python в setup.py для поиска файлов и каталогов, но в настоящий момент я не могу найти точного ответа.
О & # x2026; Ну, если вы выясните, как это сделать с Python, пожалуйста, напишите здесь. Я хотел бы знать.
1

Вам просто нужно передать приведенные ниже аргументы в функцию setup ():

packages=find_packages()

include_package_data=True

Наряду с этим вам нужно иметь файл MANIFEST.in, содержимое которого

recursive-include examples *

Это гарантирует, что все файлы включены рекурсивно.

Если вы хотите исключить определенные расширения специально, вы можете сделать это, указав массив исключений вfind_packages() аргумент.

Пример: исключить.txt файлы

packages=find_packages(exclude=['.txt'])

Вы можете прочитать больше оinclude_package_data Вот.

А такжеВот это еще одна ссылка, которая говорит вам, когда вы не должны использоватьinclude_package_data

0

что сказал Дэвид Волевер, просто чтобы было немного яснее. Если вы хотите включить все в папку подкаталога, вы должны явно указать каждый файл в файле MANIFEST.in,

recursive-include examples/ *.py *.png *.sh так далее.....

Было бы хорошо, если бы manifest.in просто понял examples/ и включать все, ну да ладно.

0

ии.

Мне нужно было сделать дистрибутив с моим пакетом, который включал несколько подмодулей в подкаталоге, так что это были файлы, в которые мне нужно было перейтиsdist:

ipyexperiments/*py
ipyexperiments/utils/*py

и что бы я ни пытался, субдирutilsмодули не были включены вsdist.

Что сработало для меня, так это уходconfig.pyпо умолчанию:

# config.py
from setuptools import setup, find_packages
[...]
setup(
    packages = find_packages(),
    [...]
)

но добавляя кMANIFEST.in:

# MANIFEST.in
graft ipyexperiments

и все подipyexperiments был включен.

Я также добавил вMANIFEST.in

prune tests
global-exclude *.py[co]

исключить всеtests каталог и любые нежелательные*pyc а также*.pyo файлы где угодно.

34

setup.py, который рекурсивно найдет любые пакеты в проекте, также обязательно включит__init__.py файлы в подкаталоги для каждого пакета, который вы хотите.

from setuptools import setup, find_packages

setup(name='MySoftware',
    packages=find_packages()
}
Будьте осторожны, потому что вы можете случайно включить тестовые каталоги и т. Д., Если явно неexclude=... эти.

Похожие вопросы