[英]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.