Не могу заставить работать distutils - PullRequest
0 голосов
/ 14 декабря 2010

Я написал скрипт на Python, который использует созданный мной пакет. Мне нужно упаковать его, чтобы я мог установить его на нескольких серверах, но я не могу найти файл setup.py для поиска моих скриптов.

В моем сценарии есть две части: connections.py и модуль, который импортируется как X.utils.printing (где X - имя моей группы). Мне нужно связать оба с distutils.

Я прочитал документацию по Python Distutils около пяти раз, но просто не понимаю.

Вот что мне нужно сделать: 1) Убедитесь, что мой модуль печати установлен и может быть импортирован с помощью

from X.utils.printing import PrettyPrint as PP

2) Поместите connections.py в / usr / sbin /

Это должно быть очень просто, но это сводит с ума.

Вот мой текущий setup.py, который не работает:

from distutils.core import setup

setup(name='connections', version='0.1.1', 
      description='Print number of IHS connections',    
      author='fandingo', author_email='fandingo@fandingo.com', 
      package_dir = {'X.utils' : 'X'}, 
      packages=['X.utils.printing'], py_modules=['printing', 'connections'])

setup.py находится и запускается из каталога с именем «python» и содержит статистику подключений / и X внутри. у соединения-статистики есть соединения. X имеет init .py, utils / init .py и utils / printing.py.

Когда я пытаюсь запустить setup.py, я получаю следующий вывод:

python setup.py bdist

работает bdist работает bdist_dumb

запуск сборки, запуск файла build_py

printing.py (для модульной печати) не

найден файл connections.py (для модуля

соединений) ошибка не найдена: пакет

каталог 'X / printing' не существует

Может ли кто-нибудь помочь мне исправить мой setup.py, чтобы я мог упаковать свой скрипт и модуль?

Спасибо за помощь.

Редактировать: Я не пытался скопировать connections.py в / usr / sbin /. Я не нашел больше, чем distutils, не найдя мои модули.


Редактировать 2: Я думаю, что я все ближе, но не могу заставить работать мою иерархию пакетов.

Использование

setup(name='connections', version='0.1.1', description='Print number of IHS connections',
      author='fandingo', author_email='fandingo@fanding.com',
      package_dir = {'printing' : 'X/utils'}, packages=['printing'], 
      scripts=['connection-stats/connections.py'])

Я получаю успешную сборку, которая имеет файл connections.py в том, что должно стать / usr / sbin / при выполнении установки. Единственная проблема заключается в том, что печать импортируется без X.utils.printing.

Я могу изменить его на X, но он не включает дочерние пакеты.

setup(name='connections', version='0.1.1', 
      description='Print number of IHS connections', 
      author='fandingo', 
      author_email='fandingo@fandingo.com', 
      packages=['X'],
      scripts=['connection-stats/connections.py'])

Проблема в том, что X импортируется, но только init .py. утилиты / не включены, что означает, что я не получаю утилиты / printing.py

Как будто мне нужна какая-то рекурсивная опция, чтобы я мог добавить X и все, что ниже. Есть мысли?

Спасибо

----------------------

Редактировать 3:

Почти закончен. Я понял, что мне нужно явно перечислить каждый подпакет в X. Вот исправленный setup.py

setup(
    name='connections',
    version='0.1.1',
    description='Print number of IHS connections',
    author='fandingo',
    author_email='fandingo@fandingo.com',
    package_dir = {'utils' : 'X/', 'printing' : 'X/utils/'},
    packages=['X', 'X.utils'],
    py_modules = ['printing'],
    scripts=['connection-stats/connections.py'])

Единственное, что connection.py не перемещается в / usr / sbin /. Я думаю, что я просто добавлю опцию после установки, чтобы переместить ее вручную.

Ответы [ 2 ]

1 голос
/ 09 октября 2011

Ваши пакеты, py_modules и package_dir слишком сложны. Давайте сделаем шаг назад. Какую файловую структуру вы хотите распространять? Если я правильно понимаю, это пакет X с подпакетом X.utils, который содержит модуль X.utils.printing. Таким образом, ваш вызов setup должен читать setup (..., packages = ['X', 'X.utils']. Итак, distutils включает не все пакеты в пакете (вы должны указать X.utils), но включает все модули в пакет (вам не нужно указывать py_modules = ['X.utils.printing']). Можете ли вы это проверить?

Во-вторых, в distutils нет поддержки sbin. Мы работаем над этим для distutils2.

1 голос
/ 14 декабря 2010

Я думаю, вы захотите что-то вроде следующего:

from distutils.core import setup

setup(name='connections',
      version='0.1.1',
      description='Print number of IHS connections',
      author='fandingo',
      author_email='fandingo@fandingo.com',
      packages=['X'],
      scripts=['connection-stats/connections.py'])

ОБНОВЛЕНИЕ: список исправлений

...