这"minimalistic"在源代码中导入的python打包的问题



我不是程序员,我的受众/用户也不是程序员。因此,我试图为我的python包提供最简约的设置。我喜欢下面的这个结构,它在这个视频中得到了认可:

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:如果我运行,名称"np"没有定义

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

但有一个原因我不明白,如果我有我的包.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

这种行为正确吗?或者我的装置中有什么古怪的东西?如果这是正常的,我如何纠正类情况下numpy的导入失败(我知道如果我从mypackage导入*会起作用,但我更喜欢从mypackage-import-myclass(?

我相信__init__.py__main__.py文件可能有最好的编程实践,但我宁愿远离它们,因为我认为它们会让其他非程序员难以遵循文件夹组织。但是,如果没有__init__.py和/或__main__.py文件就无法绕过它,那么也很高兴知道。

我觉得这是某种安装错误。当我做了一个新环境并重新安装了所有东西时,我能够使用from mypackage import myclass毫无错误地调用myclass

最新更新