Из руководства MySQL:
Идентификатор, который был сгенерирован, поддерживается на сервере для каждого соединения. Это означает, что значение, возвращаемое функцией для данного клиента, является первым значением AUTO_INCREMENT, сгенерированным для самого последнего оператора, влияющим на столбец AUTO_INCREMENT этого клиента. Это значение не может повлиять на других клиентов, даже если они генерируют собственные значения AUTO_INCREMENT. Такое поведение гарантирует, что каждый клиент может получить свой собственный идентификатор, не заботясь о деятельности других клиентов, и без необходимости блокировок или транзакций.
blockquote>Короткая версия: безопасно использовать.
Не очень имеет значение. Независимо от того, что делает, Вы счастливый будете работать. Нет большого количества глупых правил, потому что проекты Python могут быть простыми.
/scripts
или /bin
для такого материала интерфейса командной строки /tests
для Ваших тестов /lib
для Ваших библиотек языка C /doc
для большей части документации /apidoc
для Epydoc-сгенерированных документов API. И каталог верхнего уровня может содержать README's, Конфигурацию и этажерка.
трудный выбор состоит в том, использовать ли /src
дерево. Python не имеет различия между /src
, /lib
, и /bin
как Java, или C имеет.
, Так как высокоуровневый /src
каталог рассматривается некоторыми как бессмысленный, Ваш каталог верхнего уровня может быть архитектурой верхнего уровня Вашего приложения.
/foo
/bar
/baz
я рекомендую подвергнуть все это "name-of-my-product" каталогу. Так, если Вы пишете приложение, названное quux
, каталог, который содержит весь этот материал, называют /quux
.
Другой проект PYTHONPATH
, тогда, может включать /path/to/quux/foo
для многократного использования QUUX.foo
модуль.
В моем случае, так как я использую Редактирование Комодо, мой IDE cuft является единственным.KPF файлом. Я на самом деле поместил это в высокоуровневый /quux
каталог и опускаю добавлять его к SVN.
По моему опыту, это - просто вопрос повторения. Поместите свои данные и код везде, где Вы думаете, что они идут. Возможности, Вы будете неправы так или иначе. Но как только Вы получаете лучшее представление о точно, как дела идут развиться, Вы находитесь в намного лучшем положении для создания этих видов предположений.
До дополнительных источников, у нас есть каталог Code под соединительной линией, которая содержит каталог для Python и каталог для различных других языков. Лично, я более склонен попытаться поместить любой дополнительный код в его собственный репозиторий в следующий раз вокруг.
После этих слов я возвращаюсь к своей начальной точке: не заключайте слишком большую сделку из него. Поместите его где-нибудь, который, кажется, работает на Вас. Если Вы находите что-то, что не работает, это может (и если) изменяются.
Данные не-Python лучше всего связываются в Ваших модулях Python с помощью эти package_data
поддержка в setuptools. Одна вещь, которую я настоятельно рекомендую, использует пакеты пространства имен для создания совместно использованных пространств имен, которые несколько проектов могут использовать - во многом как соглашение Java помещения пакетов в com.yourcompany.yourproject
(и способность иметь общее com.yourcompany.utils
пространство имен).
ветвление Ре и слияние при использовании достаточно хорошей системы управления исходным кодом она обработает слияния даже через, переименовывает; Базар особенно хорош в этом.
Вопреки некоторым другим ответам здесь, я +1 при наличии src
верхний уровень каталога (с doc
и test
каталоги рядом). Определенные соглашения для деревьев каталогов документации будут варьироваться в зависимости от того, что Вы используете; у Сфинкса , например, есть свои собственные соглашения, которые поддерживает его инструмент быстрого запуска.
, усильте setuptools и pkg_resources; это делает намного легче для других проектов полагаться на определенные версии Вашего кода (и для нескольких версий, которые будут одновременно установлены с различными нефайлами кода, если Вы используете package_data
).
Это сообщение в блоге Жана-Поля Кальдерона обычно дается как ответ в #python на Freenode.
Структура файловой системы проекта Python
Сделайте:
- укажите имя каталога, имеющего отношение к вашему проекту. Например, если ваш проект называется «Twisted», назовите каталог верхнего уровня для его исходных файлов
Twisted
. Когда вы делаете выпуски, вы должны включать суффикс номера версии:Twisted-2.5
.- создайте каталог
Twisted / bin
и поместите туда свои исполняемые файлы, если они у вас есть. Не давайте им расширение.py
, даже если это исходные файлы Python. Не помещайте в них никакого кода, кроме импорта и вызова основной функции, определенной где-то еще в ваших проектах. (Небольшая складка: поскольку в Windows интерпретатор выбирается по расширению файла, вашим пользователям Windows действительно нужно расширение .py. Итак, когда вы упаковываете для Windows, вы можете добавить его. К сожалению, нет простого трюка с distutils, который Я знаю, как автоматизировать этот процесс. Учитывая, что в POSIX расширение .py - это всего лишь бородавка, тогда как в Windows его отсутствие является реальной ошибкой, если ваша база пользователей включает пользователей Windows, вы можете выбрать просто .py расширение везде.)- Если ваш проект можно выразить как один исходный файл Python, поместите его в каталог и назовите как-нибудь, связанное с вашим проектом. Например,
Twisted / twisted.py
. Если вам нужно несколько исходных файлов, вместо этого создайте пакет (Twisted / twisted /
с пустымTwisted / twisted / __ init __. Py
) и поместите в него свои исходные файлы. Например,Twisted / twisted / internet.py
.- поместите свои модульные тесты в подпакет вашего пакета (примечание - это означает, что указанный выше вариант с одним исходным файлом Python был уловкой - вам всегда нужен хотя бы один другой файл для ваших модульных тестов ). Например,
Twisted / twisted / test /
. Конечно, сделайте это пакетом сTwisted / twisted / test / __ init __. Py
. Поместите тесты в файлы типаTwisted / twisted / test / test_internet.py
.- добавьте
Twisted / README
иTwisted / setup.py
для объяснения и установки вашего программного обеспечения, соответственно, если вы чувствуете себя хорошо.Нельзя:
- помещать исходный код в каталог с именем
src
илиlib
. Это затрудняет работу без установки.- поместите ваши тесты вне вашего пакета Python. Это затрудняет выполнение тестов для установленной версии.
- создайте пакет, который только имеет
__ init __. Py
, а затем поместите весь свой код в__ init __. Py
. Просто сделайте модуль вместо пакета, так проще.- пытаются придумать волшебные хаки, чтобы Python мог импортировать ваш модуль или пакет, не заставляя пользователя добавлять каталог, содержащий его, в свой путь импорта (либо через PYTHONPATH, либо через какой-либо другой механизм). Вы не правильно обработаете все случаи, и пользователи будут злиться на вас, если ваше программное обеспечение не работает в их среде.