在虚拟环境中安装了自定义项目时,无法导入名称

时间:2019-11-17 00:44:15

标签: python

问题

我已阅读此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>
...
  • 第3步:转到subfolder2python program2.py,但意外返回
ModuleNotFoundError: No module named 'test.subfolder1'

问题在于,只要我在虚拟环境中,我认为test应该可用。但是,这里似乎并非如此。

有人可以帮助我吗?预先谢谢你!

1 个答案:

答案 0 :(得分:1)

您需要在__init__.py中创建一个空的subfolder1文件以将其打包。

编辑:

您应在program2.py中更改导入:

from subfolder1 import program1

或者您可以将setup.py上移一个水平。