项目结构my_package├── my_package│ ├── __init__.py│ └── my_module.py└── setup.py该模块my_module.py有一个func我试图导入的函数。该setup.py文件具有以下内容。from setuptools import setup, find_packagessetup( name='my_package', packages=find_packages(where='my_package'), version='1.0')导入API我正在安装该软件包:virtualenv --python=/usr/bin/python3.8 venvsource venv/bin/activatepython my_package/setup.py install然后使用以下命令导入它:import my_packagefrom 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__']
1 回答
凤凰求蛊
TA贡献1825条经验 获得超4个赞
您正在test.py
目录的父目录中运行脚本my_package
。因此,test.py
将尝试将my_package
子目录作为包/模块导入,而不是您安装的包。您将需要移动到不包含源代码的目录,然后运行测试。这可以像test
在my_package
主目录的子目录中运行它一样简单。
只需确保您cd
明确进入该目录,而不是使用完整路径运行它(例如,python3.8 my_package/test/test.py
,因为那样它仍然会导入错误的my_package
.
其原因(也是问题的原因)是 Pythonsys.path
在开始时自动将当前工作目录包含在 , 中,因此会尝试将主my_package
目录作为包导入。
添加回答
举报
0/150
提交
取消