Можно создать Python SDDist из другого каталога?

Хотите создать исходный дистрибутив Python, запустив python setup.py sdist из каталога за пределами того, который я хочу упаковать. Не могу найти способ сделать это. У меня есть скрипт, который генерирует setup.py а также MANIFEST.in динамически, и я хотел бы сказать python использовать эти файлы для создания sdist исходного кода в другом каталоге "там".

Я создаю скрипт, который позволяет пользователю создавать sdist без setup.py и т.д. Они просто говорят "упакуйте этот каталог и все, что в нем". Так что я генерирую setup.py а также MANIFEST.inrecursive-include * захватить все файлы) в питоне tempfile.mkdtemp каталог (в несвязанном пути к файлу, например /tmp/whatever) что я могу почистить потом... но я не могу использовать их для упаковки своего каталога. Я не хочу создавать эти файлы в их исходном каталоге.

1 ответ

Что-то вроде взлома, но у меня это сработало. Непосредственно перед запуском setup () используйте os.chdir(), чтобы изменить каталог на каталог базового пути, по которому обычно запускается setup.py. Чтобы указать, куда идут пакеты распространения, я использую аргументы для setup.py, а именно:

python setup.py sdist --formats=gztar -d 'directory_for_the_distribution' egg_info --egg-base 'directory_for_the_egg_info'

Таким образом, вы можете запускать setuptools из каталога, отличного от базового каталога пакетов, а каталоги распространения и временного яйца идут куда угодно.

Вы можете использовать setuptools's, --dist-dir=DIR / -d DIR возможность указать, где в противном случае создается папка dist /-fol по умолчанию. Другими словами, это меняет каталог вывода.

Например:

python setup.py sdist -d /tmp/whatever

Если вы используете distutils.core: Вместо того, чтобы использовать from distutils.core import setup ты можешь использовать from setuptools import setup,

Чтобы определить, откуда берутся исходные каталоги, я думаю, что вы можете добавить каталог в sys.path а потом setup() обнаружит файлы содержимого автоматически:

import sys
from os import path
# ...

# Add other folders to sys.path
sys.path.append('/tmp/whatever')
sys.path.append(path.join(path.abspath('..'), 'some', 'folder'))
Другие вопросы по тегам