簡體   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