Можно создать Python SDDist из другого каталога?
Хотите создать исходный дистрибутив Python, запустив python setup.py sdist
из каталога за пределами того, который я хочу упаковать. Не могу найти способ сделать это. У меня есть скрипт, который генерирует setup.py
а также MANIFEST.in
динамически, и я хотел бы сказать python использовать эти файлы для создания sdist исходного кода в другом каталоге "там".
Я создаю скрипт, который позволяет пользователю создавать sdist без setup.py
и т.д. Они просто говорят "упакуйте этот каталог и все, что в нем". Так что я генерирую setup.py
а также MANIFEST.in
(с recursive-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'))