如何在Python包中导入符号



我有三个与数据库相关的类,我想将它们组合成一个包,结构如下:

adodb_pyodbc /
__init__.py  # empty
PyConnection.py
PyRecordset.py
PyField.py

这个软件包在我的Lib/site软件包文件夹中。

在这个尝试的早期迭代中,我没有使用"Py"前缀,我收到了一个错误,抱怨module.__init__()只接受两个参数,其中三个参数正在传递。有人认为"Recordset"这个名称可能与其他名称冲突,所以我更改了它。

当文件与使用这些类的项目位于同一文件夹中时,这些类就可以工作。在这种情况下,我可以使用:

PyRecordset.py:

from PyConnection import PyConnection
from PyField import PyField
class PyRecordset: pass

衍生集.py

from PyRecordset import PyRecordset
class DerivedRecordset(PyRecordset): pass

但是,当这些文件位于包中时,它们就不起作用了。我的测试程序以这一行开始:

from adodb_pyodbc import PyConnection as Connection

当我运行它时,我会收到以下错误消息:

C:Python35python.exe "C:/Customers/Nucor Crawfordsville/Scripts/64 bit/Testing/cpsa_simulator.py"
Traceback (most recent call last):
File "C:/Customers/Nucor Crawfordsville/Scripts/64 bit/Testing/cpsa_simulator.py", line 8, in <module>
from Level3_CoilsSet import Level3_CoilsSet
File "C:CustomersNucor CrawfordsvilleScripts64 bitTestingLevel3_CoilsSet.py", line 1, in <module>
from adodb_pyodbc import PyRecordset as Recordset
File "C:Python35libsite-packagesadodb_pyodbcPyRecordset.py", line 9, in <module>
from PyConnection import PyConnection
ImportError: No module named 'PyConnection'

但是当在PyCharm中编辑PyRecordset.py时,它似乎能够找到PyConnection.py文件。

我尝试在PyConnection.py中使用相对寻址:

from . import PyConnection
from . import PyField

但这让我回到了__init__()错误:

C:Python35python.exe "C:/Customers/Nucor Crawfordsville/Scripts/64 bit/Testing/cpsa_simulator.py"
Traceback (most recent call last):
File "C:/Customers/Nucor Crawfordsville/Scripts/64 bit/Testing/cpsa_simulator.py", line 8, in <module>
from Level3_CoilsSet import Level3_CoilsSet
File "C:CustomersNucor CrawfordsvilleScripts64 bitTestingLevel3_CoilsSet.py", line 3, in <module>
class Level3_CoilsSet(Recordset):
TypeError: module.__init__() takes at most 2 arguments (3 given)

我该怎么做?

非常感谢你的帮助。在此期间,我将从包中取出这些文件,并将它们放回我的测试项目中。我在这个问题上浪费了太多时间。

当您从包外使用PyConnection时,您必须从定义它的模块导入它:

from adodb_pyodbc.PyConnection import PyConnection as Connection

或者,更方便的是,将其导入包初始化文件adodb_pyodbc/__init__.py:

from .PyConnection import PyConnection

然后,从外面看,你可以做:

from adodb_pyodbc import PyConnection as Connection

最新更新