我不是程序员,我的受众/用户也不是程序员。因此,我试图为我的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