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