繁体   English   中英

如何在Python包中导入符号?

[英]How do I import symbols inside a Python package?

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

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

该软件包在我的Lib / site-packages文件夹中。

在此尝试的较早迭代中,我没有使用“ Py”前缀,并且在抱怨module.__init__()仅接受两个参数,并且向其中传递了三个参数时出错。 有人建议名称“ Recordset”可能与其他名称冲突,因此我将其更改。

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

PyRecordset.py:

from PyConnection import PyConnection
from PyField import PyField

class PyRecordset: pass

DerivedSet.py

from PyRecordset import PyRecordset

class DerivedRecordset(PyRecordset): pass

但是,当它们位于包中时,相同的文件将不起作用。 我的测试程序从以下这一行开始:

from adodb_pyodbc import PyConnection as Connection

当我运行它时,我收到此错误消息:

C:\Python35\python.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:\Customers\Nucor Crawfordsville\Scripts\64 bit\Testing\Level3_CoilsSet.py", line 1, in <module>
    from adodb_pyodbc import PyRecordset as Recordset
  File "C:\Python35\lib\site-packages\adodb_pyodbc\PyRecordset.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:\Python35\python.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:\Customers\Nucor Crawfordsville\Scripts\64 bit\Testing\Level3_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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM