我已阅读此post,它提供了一种在同级目录之间导入名称时永久避免sys.path
被黑客入侵的方法。但是,我按照该文章中列出的步骤进行操作,但是发现我无法导入已安装的程序包(即test
)。
以下是我已经完成的事情
__init__.py
都是空的。test
├── __init__.py
├── setup.py
├── subfolder1
│ ├── __init__.py
│ ├── program1.py
├── subfolder2
│ ├── __init__.py
│ └── program2.py
# setup.py
from setuptools import setup, find_packages
setup(name="test", version="0.1", packages=find_packages())
# program1
def func1():
print("I am from func1 in subfolder1/func1")
# program2
from test.subfolder1 import program1
program1.func1()
test
目录)中创建虚拟环境
conda create -n test --clone base
conda activate test
pip install -e .
conda list
,我看到以下内容,这意味着我的test
项目确实已安装在虚拟环境中...
test 0.1 dev_0 <develop>
...
subfolder2
和python program2.py
,但意外返回ModuleNotFoundError: No module named 'test.subfolder1'
问题在于,只要我在虚拟环境中,我认为test
应该可用。但是,这里似乎并非如此。
有人可以帮助我吗?预先谢谢你!
答案 0 :(得分:1)
您需要在__init__.py
中创建一个空的subfolder1
文件以将其打包。
编辑:
您应在program2.py
中更改导入:
from subfolder1 import program1
或者您可以将setup.py
上移一个水平。