Setuptools: импорт из «проекта» с помощью setup.py в исходной папке

1

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

Пример 1, структура каталогов.

MyModule
├── __init__.py
├── MyApp.ini
├── MyApp.py
├── setup.py
└── foo.py

Это мой stetup.py

from setuptools import setup, find_packages
packages = find_packages(exclude=['ez_setup', 'tests', 'tests.*'])

console_script = list()
console_script.append('MyApp = MyApp:main')

py_modules = list()
py_modules.append('MyApp')

other_files = list()
other_files.append('MyApp.ini')

module_name = "MyModule"

mysetup = setup(name=module_name,
                py_modules=py_modules,
                version="1.0.0",
                packages=packages,
                package_dir={module_name: module_name},
                package_data={module_name: other_files},
                include_package_data=True,
                entry_points={'console_scripts': console_script, },
                zip_safe=False,
                python_requires='>=2.7,<=3.0',
                )

После установки MyModule с помощью "установки установки python". Я не могу импортировать из MyModule. 'из MyModule import MyApp' не работает. Я могу импортировать напрямую. "Импорт MyApp" работает. Проблемы также связаны с "import foo". У меня есть несколько проектов с разными foo.py.

Пример 2:

Если бы я мог изменить структуру каталогов, как показано ниже. Установка работает правильно.

MyModule
├── MyModule
│   ├── foo.py
│   ├── __init__.py
│   ├── MyApp.ini
│   └── MyApp.py
└── setup.py

Есть ли способ получить образец 1, чтобы установить способ, который делает образец 2?

Теги:
python-2.7
setuptools

1 ответ

0

Я смог ответить на свой вопрос. Это можно сделать, установив package_dir на один уровень, как показано ниже. Я должен был использовать data_files, а не package_data, чтобы добавить файлы поддержки.

Ограничение: Установочный скрипт setup.py установлен как часть яйца. Я пытался исключить его, но он все равно устанавливается.

from setuptools import setup, find_packages
packages = find_packages(exclude=['ez_setup', 'tests', 'tests.*'])

console_script = list()
console_script.append('MyApp = MyModule.MyApp:main')

packages.append("MyModule")

setup(name="MyModule",
      version="1.0.0",
      packages=packages,
      package_dir={"MyModule": "../MyModule"},
      data_files=[('MyModule', ['MyApp.ini'])],
      include_package_data=True,
      entry_points={'console_scripts': console_script, },
      zip_safe=False,
      python_requires='>=2.7,<=3.0',
      )

Ещё вопросы

Сообщество Overcoder
Наверх
Меню