ImportError: cannot import name (unknown location)
ImportError: cannot import name (unknown location)
项目结构
my_package
├── my_package
│ ├── __init__.py
│ └── my_module.py
└── setup.py
模块 my_module.py
有一个 func
函数,我正在尝试导入。
setup.py
文件包含以下内容。
from setuptools import setup, find_packages
setup(
name='my_package',
packages=find_packages(where='my_package'),
version='1.0'
)
导入API
我正在安装软件包:
virtualenv --python=/usr/bin/python3.8 venv
source venv/bin/activate
python my_package/setup.py install
然后导入:
import my_package
from my_package import my_module
然而,第二次导入失败:
ImportError: cannot import name 'my_module' from 'my_package' (unknown location)
此外,运行 dir(my_package)
表明确实没有导入 my_module
名称。
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
关于 SO 的类似问题
setup.py installed package can't be imported 提供的解决方案证明不成功。
在 my_package/my_package
中添加 __init__.py
文件无效。
Git 回购
我已经在 GitLab
中放置了一个问题示例
您正在 运行 在 my_package
目录的父目录中安装 test.py
脚本。因此,test.py
将尝试将 my_package
子目录导入为 package/module,而不是您安装的包。您需要移动到不包含您的源代码的目录,然后 运行 进行测试。这可能就像 运行 将它放在 my_package
主目录的子目录 test
中一样简单。
只需确保您 cd
明确进入该目录,而不是 运行 使用完整路径(例如 python3.8 my_package/test/test.py
,因为那样它仍然会导入错误的 my_package
.
这样做的原因(以及您的问题的原因)是 Python 在开始时自动将当前工作目录包含在您的 sys.path
中,因此将尝试导入主 my_package
目录作为一个包。
项目结构
my_package
├── my_package
│ ├── __init__.py
│ └── my_module.py
└── setup.py
模块 my_module.py
有一个 func
函数,我正在尝试导入。
setup.py
文件包含以下内容。
from setuptools import setup, find_packages
setup(
name='my_package',
packages=find_packages(where='my_package'),
version='1.0'
)
导入API
我正在安装软件包:
virtualenv --python=/usr/bin/python3.8 venv
source venv/bin/activate
python my_package/setup.py install
然后导入:
import my_package
from my_package import my_module
然而,第二次导入失败:
ImportError: cannot import name 'my_module' from 'my_package' (unknown location)
此外,运行 dir(my_package)
表明确实没有导入 my_module
名称。
['__doc__', '__file__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
关于 SO 的类似问题
setup.py installed package can't be imported 提供的解决方案证明不成功。
my_package/my_package
中添加 __init__.py
文件无效。
Git 回购
我已经在 GitLab
中放置了一个问题示例您正在 运行 在 my_package
目录的父目录中安装 test.py
脚本。因此,test.py
将尝试将 my_package
子目录导入为 package/module,而不是您安装的包。您需要移动到不包含您的源代码的目录,然后 运行 进行测试。这可能就像 运行 将它放在 my_package
主目录的子目录 test
中一样简单。
只需确保您 cd
明确进入该目录,而不是 运行 使用完整路径(例如 python3.8 my_package/test/test.py
,因为那样它仍然会导入错误的 my_package
.
这样做的原因(以及您的问题的原因)是 Python 在开始时自动将当前工作目录包含在您的 sys.path
中,因此将尝试导入主 my_package
目录作为一个包。