Допустим, вы открываете файл с помощью оператора with
, как и должно быть. Затем вы сделаете что-то подобное для чтения из вашего файла:
with open('somefile.txt', 'w+') as f:
# Note that f has now been truncated to 0 bytes, so you'll only
# be able to read data that you wrote earlier...
f.write('somedata\n')
f.seek(0) # Important: return to the top of the file before reading, otherwise you'll just read an empty string
data = f.read() # Returns 'somedata\n'
Обратите внимание на f.seek(0)
- если вы забудете об этом, вызов f.read()
попытается прочитать с конца файл и вернет пустую строку.
Он устанавливает их в автоматически создаваемый подкаталог базы кода с именем .eggs
как .egg
s. Это потому, что .egg
разработаны для импорта из любого места.
Таким образом, это, скорее всего, не будет работать в современной среде, потому что пакеты не распространяются как .egg
с (что потеряло конкуренцию с .whl
с), поэтому setuptools
придется собирать их из источника (с bdist_egg
). Что, скорее всего, не удастся для многих широко используемых бинарных пакетов с нетривиальными требованиями к сборке (не говоря уже о необходимом времени и о том, что пакеты также не тестируются как .egg
, и могут потерпеть неудачу при такой упаковке). [1119 ]
Вместо этого перечисление требований к сборке в requirements.txt
и вызов pip install -r requirements.txt
до сборки, похоже, стали широко распространенной практикой. Это не делает setup.py
автоматически собираемым из источника pip
.
Я пытался установить их самостоятельно из setup.py
, но это оказалось хрупким (например, если у пользователя нет прав на запись в site-packages
).
Лучшее решение, принятое, по крайней мере, рядом крупных проектов, - это просто заставить setup.py
потерпеть неудачу, если их нет. Это особенно полезно, если требования не к Python, а к библиотекам C, поскольку setup.py
все равно не знает, как установить их в конкретной среде. Как видите, это естественным образом дополняет requirements.txt
.
Избегайте python setup.py test
и tests_require
, это старая фраза "особенность".
Это просто загружает тестовые файлы в директорию установки проекта, что редко случается с разработчиком! Это не очень хорошо работает в современных рабочих процессах CI с виртуальными средами, где вы хотите, чтобы ваши зависимости были установлены в пакетах сайта.
Рекомендованный способ сделать это с помощью setuptools в наши дни - с помощью тега extras_require
. . См. здесь для примера.