Setuptools: 使用位于源文件夹中的setup.py从“项目”导入

3

我正在尝试为一个现有项目创建 setup.py 文件。该项目具有无法更改的目录结构。我需要将我的 setup.py 放在与项目源文件相同的文件夹中。

示例1,目录结构。

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

这是我的setup.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',
                )

通过“python setup install”安装MyModule后,我无法从MyModule中导入任何东西。“from MyModule import MyApp”不能正常工作。可以直接导入。“import MyApp”正常工作。问题是“import foo”也有效。我有多个具有不同foo.py的项目。
样例2:
如果我可以像下面展示的更改目录结构。安装将正确执行。
MyModule
├── MyModule
│   ├── foo.py
│   ├── __init__.py
│   ├── MyApp.ini
│   └── MyApp.py
└── setup.py

有没有一种方法可以让示例1安装方式与示例2相同?
1个回答

3
我能够回答自己的问题。可以通过如下设置package_dir来实现。我必须使用data_files而不是package_data来添加支持文件。
限制:setup脚本 setup.py 作为egg的一部分被安装。我试图排除它,但它仍然被安装了。
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',
      )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接