2008-09-13 2 views

ответ

4

Есть ли причина, по которой вы хотите избегать положить пустой __init__.py файлы в контроле версий? Если вы сделаете это, вы не сможете отправить import свои пакеты из исходной директории с запущенными distutils.

Если вы действительно этого хотите, я полагаю, вы можете создать __init__.py в setup.py. Он должен быть перед тем работает distutils.setup, так setup сам сможет найти свои пакеты:

from distutils import setup 
import os 

for path in [my_package_directories]: 
    filename = os.path.join(pagh, '__init__.py') 
    if not os.path.exists(filename): 
     init = open(filename, 'w') 
     init.close() 

setup(
... 
) 

но ... что бы вы получить от этого, по сравнению с наличием пустых __init__.py файлов там в первую очередь ?

7

В Python файлы __init__.py имеют смысл! Они означают, что папка, в которой они находятся, является модулем Python. Таким образом, они имеют реальную роль в вашем коде и, скорее всего, будут храниться в контроле версий.

Вы можете представить себе папку в исходном дереве, которая НЕ является модулем Python, например папкой, содержащей только ресурсы (например, изображения) и без кода. Эта папка не должна содержать файл __init__.py. Теперь, как вы делаете разницу между папками, где distutils должен создавать те файлы и папки, где это не должно быть?

+0

Это вопрос, можете ли вы сказать distutils, что данная папка должна интерпретироваться как пакет, хотя у нее нет файла __init__.py. Я всегда мог создавать файлы __init__.py при создании дистрибутива, но мне было интересно, можете ли вы сделать это с distutils. – jelovirt 2008-09-13 11:39:45

+3

Да, есть способ сообщить distutils (и любой другой код Python), что папка представляет собой пакет: поместите в папку файл __init__.py. – 2008-09-13 12:08:08