У вас есть два варианта: запишите свои изменения:
git stash
, а затем, чтобы вернуть их:
git stash apply
или поместить свои изменения в ветку, чтобы вы могли получить удаленной ветви, а затем объединить изменения на ней. Это одна из самых больших вещей в git: вы можете сделать ветку, зафиксировать ее, а затем внести другие изменения в ветку, в которой вы были.
Вы говорите, что это не имеет никакого смысла, но вы только делают это, чтобы вы могли объединить их по своему усмотрению после выполнения тяги. Очевидно, ваш другой выбор состоит в том, чтобы зафиксировать на своей копии ветки, а затем сделать тягу. Презумпция заключается в том, что вы либо не хотите этого делать (в этом случае я озадачен тем, что вам не нужна ветка), либо вы боитесь конфликтов.
Вероятно, лучший способ сделать это - использовать директиву setuptools
package_data
. Это означает использование setuptools
(или distribute
) вместо distutils
, но это очень плавное «обновление».
Вот полный (но непроверенный) пример:
from setuptools import setup, find_packages
setup(
name='your_project_name',
version='0.1',
description='A description.',
packages=find_packages(exclude=['ez_setup', 'tests', 'tests.*']),
package_data={'': ['license.txt']},
include_package_data=True,
install_requires=[],
)
Обратите внимание на конкретные критические значения здесь:
package_data={'': ['license.txt']},
include_package_data=True,
package_data
является dict
имен пакетов ( empty = all packages) в список шаблонов (может включать в себя глобусы). Например, если вы хотите указывать только файлы внутри своего пакета, вы также можете это сделать:
package_data={'yourpackage': ['*.txt', 'path/to/resources/*.txt']}
Решение здесь, безусловно, , а не , чтобы переименовать ваш py
] с расширением .py
.
Для получения дополнительной информации см. презентацию Ian Bicking .
Другой подход, который хорошо работает, если вы просто хотите контролировать содержимое исходного дистрибутива (sdist
) и иметь файлы за пределами пакета (например, каталог верхнего уровня), - это добавить файл MANIFEST.in
. См. документацию Python для формата этого файла.
С момента написания этого ответа я обнаружил, что использование MANIFEST.in
, как правило, менее отвратительный подход, чтобы убедиться, что ваш источник дистрибутив (tar.gz
) имеет нужные файлы.
Например, если вы хотите включить requirements.txt
с верхнего уровня, рекурсивно включить каталог «данных» верхнего уровня:
include requirements.txt
recursive-include data *
Тем не менее, для того, чтобы эти файлы, которые будут скопированы во время установки в папку пакета внутри пакетов сайта, вам нужно будет предоставить include_package_data=True
функции setup()
. См. Добавление некодовых файлов для получения дополнительной информации.
создайте MANIFEST.in
в корне проекта с recursive-include
в требуемый каталог или include
с именем файла.
include LICENSE
include README.rst
recursive-include package/static *
recursive-include package/templates *
В setup.py при настройке (:
setup(
name = 'foo library'
...
package_data={
'foolibrary.folderA': ['*'], # All files from folder A
'foolibrary.folderB': ['*.txt'] #All text files from folder B
},
Чтобы выполнить то, что вы описываете, вы получите два шага ...
Шаг 1: Чтобы добавить файл в исходный архив, включите его в MANIFEST
Создайте МАНИФЕСТ в папке, содержащей setup.py
MANIFEST - это в основном текстовый файл со списком всех файлов, которые будут включены в исходный архив.
Вот как выглядит MANIFEST для моего проекта:
Примечание: в то время как sdist автоматически добавляет некоторые файлы , я предпочитаю явно указывать их, а не предсказывать, что он делает и не делает.
Шаг 2: Чтобы установить файл данных в исходную папку , измените setup.py
. Поскольку вы хотите добавить файл данных (LICENSE.txt) в папку установки источника, вам необходимо изменить путь установки данных, чтобы он соответствовал пути установки источника. Это необходимо, потому что по умолчанию файлы данных устанавливаются в другое место, чем исходные файлы.
Чтобы изменить каталог установки данных в соответствии с исходным установочным каталогом ...
Pull информацию об установочном директории от distutils с помощью:
from distutils.command.install import INSTALL_SCHEMES
Измените каталог установки данных в соответствии с исходным установочным каталогом:
for scheme in INSTALL_SCHEMES.values():
scheme['data'] = scheme['purelib']
И добавьте файл данных и местоположение для настройки ():
data_files=[('', ['LICENSE.txt'])]
Примечание. Вышеупомянутые шаги должны выполнять именно то, что вы описали стандартным образом, не требуя каких-либо библиотек расширений.
package_data
, не работает, если файл отсутствует в пакете.
– Gringo Suave
3 January 2013 в 00:50
Вот более простой ответ, который сработал для меня.
Во-первых, за комментарий Python Dev выше, setuptools не требуется:
package_data is also available to pure distutils setup scripts
since 2.3. – Éric Araujo
Это здорово, потому что установка требования setuptools на ваш пакет означает, что вам также придется его установить. Короче:
from distutils.core import setup
setup(
# ...snip...
packages = ['pkgname'],
package_data = {'pkgname': ['license.txt']},
)
Выяснилось обходное решение: я переименовал свой lgpl2.1_license.txt
в lgpl2.1_license.txt.py
и поместил несколько трёхколейных цитат вокруг текста. Теперь мне не нужно использовать параметр data_files
и не указывать абсолютные пути. Я думаю, что сделать его модулем Python уродливо, но я считаю его менее уродливым, чем указание абсолютных путей.
Я просто хотел следить за тем, что я нашел, работая с Python 2.7 на Centos 6. Добавление пакетов_данных или data_files, как упоминалось выше, не помогло мне. Я добавил MANIFEST.IN с файлами, которые я хотел, которые помещали файлы, отличные от python, в tarball, но не устанавливали их на целевой машине через RPM.
В конце концов, мне удалось получить файлы в моем решении, используя «параметры» в setup / setuptools. Файлы параметров позволяют изменять различные разделы файла spec из файла setup.py. Как показано ниже.
from setuptools import setup
setup(
name='theProjectName',
version='1',
packages=['thePackage'],
url='',
license='',
author='me',
author_email='me@email.com',
description='',
options={'bdist_rpm': {'install_script': 'filewithinstallcommands'}},
)
file - MANIFEST.in:
include license.txt
file - filewithinstallcommands:
mkdir -p $RPM_BUILD_ROOT/pathtoinstall/
#this line installs your python files
python setup.py install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
#install license.txt into /pathtoinstall folder
install -m 700 license.txt $RPM_BUILD_ROOT/pathtoinstall/
echo /pathtoinstall/license.txt >> INSTALLED_FILES