导入具有相同名称的模块

时间:2018-05-02 19:19:52

标签: python python-import setuptools setup.py

基本上,我有两个python项目,一个位于myapp/screening下,另一个位于myapp/server下。我目前正在开发server模块,并希望使用screeningmyapp.screening导入功能。

我的文件夹结构如下所示:

myapp/
    screening/
        screening-env/
        myapp/
            __init__.py
            screening/
                __init__.py
                screening_task.py
                submodule1/
                    # __init__.py and ub module files
                submodule2/
                    # __init__.py and sub module files
                submodule3/
                    # __init__.py and sub module files
        tests/
            # __init__.py and test scripts
        setup.py
    server/
        server-env/
        myapp/
            __init__.py
            server/
                __init__.py
                server_task.py
        tests/
            __init__.py
            server_test.py

我在answer之后构建了我的项目。

我的setup.py基本上如下:

from setuptools import setup

setup(
    name='myapp-screening',
    version='0.1.0',
    packages=[
        'myapp.screening',
        'myapp.screening.submodule1',
        'myapp.screening.submodule2',
        'myapp.screening.submodule3'
    ],
)

我已激活server-env并安装了筛选项目,导航到myapp/screening/(与setup.py相同的目录)并运行python setup.py develop

最后,server_test.pyserver_task都是如下:

from myapp.screening.screening_test import foo

foo()

当我运行python -m myapp.server.server_taskpython -m test.server_test时,我得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'myapp.screening'

如果我正在运行python -m myapp.server.server_task,因为本地myapp存在且可能覆盖包含{{{}的已安装myapp,则此错误有意义1}} modules。

有没有办法使用screeningscreening导入内容?!

1 个答案:

答案 0 :(得分:0)

因此,经过一些研究后,我发现this similar (in a way) question导致import python modules with the same nameHow do I create a namespace package in Python?

“导入具有相同名称的模块”的答案没有用,因为它说重命名一个模块或将项目目录转换为包。

另一个问题正是我想要的。它基本上讨论了pkgutil,您可以将模块附加到给定的命名空间。

对于某些情况(例如this),我理解并分享了一些针对此技术的观点,但是因为它呈现here,有时您需要分离的结构,因此即使您不喜欢也不要修改所有内容不想要一切