Setuptools: импорт из «проекта» с помощью setup.py в исходной папке - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь создать файл 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 setup install'.Я не могу импортировать из MyModule.«из MyModule импорт MyApp» не работает.Я могу импортировать напрямую.'import MyApp' работает.Проблема в том, что «import foo» также работает.У меня есть несколько проектов с разными foo.py.

Пример 2:

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

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

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

1 Ответ

0 голосов
/ 03 декабря 2018

Я смог ответить на свой вопрос.Это можно сделать, установив 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',
      )
...