基本上,我有两个python项目,一个位于myapp/screening
下,另一个位于myapp/server
下。我目前正在开发server
模块,并希望使用screening
从myapp.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.py
和server_task
都是如下:
from myapp.screening.screening_test import foo
foo()
当我运行python -m myapp.server.server_task
或python -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。
有没有办法使用screening
从screening
导入内容?!
答案 0 :(得分:0)
因此,经过一些研究后,我发现this similar (in a way) question导致import python modules with the same name和How do I create a namespace package in Python?。
“导入具有相同名称的模块”的答案没有用,因为它说重命名一个模块或将项目目录转换为包。
另一个问题正是我想要的。它基本上讨论了pkgutil
,您可以将模块附加到给定的命名空间。
对于某些情况(例如this),我理解并分享了一些针对此技术的观点,但是因为它呈现here,有时您需要分离的结构,因此即使您不喜欢也不要修改所有内容不想要一切