Думаю, я нашел хороший компромисс, который позволит вам создать следующую структуру:
/ #root
|- data/
| |- resource1
| |- [...]
|- src/
| |- mypackage/
| | |- __init__.py
| | |- [...]
|- setup.py
Вы должны установить данные как package_data, чтобы избежать проблем, описанных в ответе samplebias, но для того, чтобы mantain структуру файла, которую вы должны добавить в свой setup.py:
try:
os.symlink('../../data', 'src/mypackage/data'
setup(
...
package_data = {'mypackage': ['data/*']}
...
)
finally:
os.unlink('src/mypackage/data')
Таким образом мы создаем соответствующую структуру «как раз вовремя» и организуем наше исходное дерево.
Для доступа к таким файлам данных в вашем коде вы просто используете:
data = resource_filename(Requirement.parse("main_package"), 'mypackage/data')
Мне все еще не нравится указывать «mypackage» в коде, так как данные могут не иметь ничего общего с этим модулем, но я думаю, что это хороший компромисс.
Установите svn:ignore
свойство родительского каталога:
svn propset svn:ignore dirname .
, Если у Вас есть несколько вещей проигнорировать, отделитесь новыми строками в значении свойства. В этом случае легче отредактировать значение свойства с помощью внешнего редактора:
svn propedit svn:ignore .
При использовании frontend для SVN как TortoiseSVN или своего рода интеграции IDE должна также быть проигнорировать опция в том же меню, как фиксировать/добавлять операция.
Если Вы используете конкретный клиент SVN TortoiseSVN, то на фиксации, у Вас есть опция щелчка правой кнопкой по объектам и выбора, "Добавьте к черному списку".
Для расширения немного при выполнении этого с svn инструментом командной строки Вы хотите ввести:
svn propedit svn:ignore path/to/dir
, который откроет Ваш предпочтительный текстовый редактор, затем введите '*' для игнорирования всего в нем и save+quit - это будет включать сам каталог в svn, но игнорировать все файлы в нем, чтобы проигнорировать каталог, использовать путь родителя, и затем ввести имя каталога в файле. После сохранения, выполненного обновление ('svn'), и затем, регистрируются в соответствующем пути.
Вот структура каталогов в качестве примера:
\project
\source
\cache
\other
, Когда в project
Вы видите, что Ваш каталог кэша не добавляется и обнаруживается как таковой.
> svn st
M source
? cache
Для установки проигнорировать свойства сделайте
svn propset svn:ignore кэш.
, где svn:ignore
название свойства, Вы устанавливаете, cache
значение свойства, и .
каталог, на котором Вы устанавливаете это свойство. Это должен быть родительский каталог cache
каталог, для которого нужно свойство.
Для проверки, какие свойства установлены:
> svn proplist
Properties on '.':
svn:ignore
Для наблюдения значения [1 110]:
> svn propget svn:ignore
cache
Для удаления свойств ранее набор:
svn propdel svn:ignore
Если Ваш каталог проекта называют Проектом/, и Ваш каталог кэша называют/Project/Cache, то необходимо установить свойство подрывной деятельности на Проекте/. Имя свойства должно быть "svn:ignore", и значением свойства должен быть "Кэш".
Относятся к этот страница в руководстве Подрывной деятельности для больше на свойствах.
Ответ Jason добьется цели. Однако вместо того, чтобы установить svn:ignore на на каталоге кэша, можно хотеть включать "кэш" в родитель svn:ignore свойство каталога, в случае, если каталог кэша не всегда присутствует. Я делаю это в ряде "холостых" папок.
Установите svn:ignore
свойство на родительском каталоге:
$ cd parentdir
$ svn ps svn:ignore . 'cachedir'
Это перезапишет любое текущее значение svn:ignore
. Вы редактирование значение с:
$ svn pe svn:ignore .
, Который откроет Вашего редактора. Можно добавить несколько шаблонов, один на строку.
можно просмотреть текущее значение с:
$ svn pg svn:ignore .
при использовании GUI должен быть пункт меню сделать это.
Установите свойство svn:ignore . Большая часть UI svn инструменты имеет способ сделать это, а также обсуждение командной строки в ссылке.
Важно отметить:
В командной строке нельзя использовать
svn add *
. Это также добавит игнорируемые файлы, поскольку командная строка раскрывается *
и, следовательно, svn add
считает, что вы хотите, чтобы все файлы были добавлены. Поэтому используйте это вместо:
svn add --force .
Поскольку я потратил некоторое время, пытаясь заставить это работать, следует отметить, что если файлы уже существуют в SVN, вам необходимо svn удалить
их, а затем отредактируйте свойство svn: ignore
.
Я знаю, что это кажется очевидным, но они продолжали отображаться как ?
в моем списке svn status
, когда я думал он просто проигнорирует их локально.