【发布时间】:2020-04-21 04:43:39
【问题描述】:
我有一个名为 build-your-own-computer 的项目,其结构如下所示:
build-your-own-computer
├── computer
│ ├── arithmetic
│ ├── __init__.py
│ ├── logic
│ └── memory
├── README.md
├── setup.py
├── setup.py~
├── solutions
│ ├── arithmetic
│ │ ├── half_adder.py
│ │ ├── __init__.py
│ │ └── __init__.py~
│ ├── __init__.py
│ ├── __init__.py~
│ ├── logic
│ │ ├── _and.py
│ │ ├── __init__.py
│ │ ├── __init__.py~
│ │ ├── _not.py
│ │ ├── _or.py
│ │ └── xor.py
│ └── memory
│ └── __init__.py
└── tests
├── arithmetic
│ └── test_half_adder.py
├── logic
│ ├── test_and.py
│ ├── test_not.py
│ ├── test_or.py
│ └── test_xor.py
└── memory
我的目标是能够使用 pip 安装这个项目/包,然后在我系统上的任何地方使用它。我想像这样导入包/模块:
from byoc.solutions.logic import _and
from byoc.computer.arithmetic import half_adder
据我了解,build-your-own-computer 本身可以被认为是一个包,build-your-own-computer\computer 是一个子包,build-your-own-computer\computer\logic\ 是一个子子包。除了 init 和 setup.py 之外的所有 .py 文件都是模块。是否正确,上面的导入方案是否与这个项目结构相对应?
所有__init__.py 文件都是空的。
setup.py 包含以下内容:
from setuptools import setup, find_packages
setup(
name='byoc',
packages=find_packages()
)
当我使用 pip 安装它然后尝试导入子模块时,我遇到了问题:
>>> from byoc.solutions.logic import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'byoc.solutions'
我可以毫无错误地导入byoc。
我显然做错了什么,但是什么?
【问题讨论】:
-
我要测试的第一件事是,“本地”完成所有导入工作。也就是说,我将
PYTHONPATH=.和cd设置为byoc存在的目录,然后测试导入它,导入子模块。 -
但是
byoc甚至没有在您的项目结构中定义(我没有看到名为byoc并包含__init__.py的目录)。怎么可能导入? 据我了解,build-your-own-computer本身可以被视为一个包 不,build-your-own-computer是包含您的项目的目录。包是computer和solutions,例如from computer import logic应该可以工作。如果你想要一个byoc包,请在你的项目目录中创建它,然后将computer和logic移到其中。
标签: python import module package setuptools