这个 "minimalistic" python 包的问题在源代码中有一个导入

Problem with this "minimalistic" python packaging that has an import in source code

我不是程序员,我的audience/users也不是程序员。所以我正在尝试为我的 python 包进行最简约的设置。我喜欢下面的这个结构,在这个 video:

中得到认可
python-mypackage/
└── src/
    └── mypackage.py

文件mypackage.py:

import numpy as np

class myclass():
    def __init__(self, var_a, var_b):
        self.var_a = var_a
        self.var_b = var_b

    def mult(self):
        return np.matmul(self.var_a, self.var_b)

当我使用 python setup.py bdist_wheel 构建它时,使用 setup.py:

from setuptools import setup

setup(
    name='mypackage',
    version='0.0.1',
    description='Test package',
    py_modules=["mypackage"],
    package_dir={'': 'src'},
)

并使用带有 pip install -e . 的 pip 安装它,我得到一个 NameError: name 'np' is not defined if I 运行

from mypackage import myclass

test = myclass([1,2], [3,4])
#Returns, NameError: name 'np' is not defined

但是由于我不明白的原因,如果我有 mypackage.py:

import numpy as np

def mult(var_a, var_b):
    return np.matmul(var_a, var_b)

然后我构建它并 pip 安装它,下面的代码有效:

from mypackage import mult

mult([1,2], [3,4])
#Returns 11

这种行为是否正确?或者我的装置中有什么奇怪的东西吗?如果正常,我该如何纠正 class 情况下 numpy 的导入失败(我知道如果我从 mypackage 导入 * 会起作用,但我宁愿做 from mypackage 导入 myclass) ?

我确信 __init__.py__main__.py 文件可能有最佳编程实践,但我宁愿远离它们,因为我认为它们使文件夹组织有点难以遵循非程序员。但是,如果没有 __init__.py and/or __main__.py 文件就无法绕过它,那也很好知道。

我的印象是这是某种安装错误。当我创建一个新环境并重新安装所有内容时,我可以使用 from mypackage import myclass

调用 myclass 而不会出错