感謝您看到這一點,我一直在考慮這幾個小時無濟於事。本質上,我想讓我的代碼更加模塊化和可共享:您可以看到以下文件最初是如何組成更大的文件的。它不工作,我懷疑這是因爲我想要做的事情在Python說我不應該:最好的/你在Python中的實踐共享全局變量,共享函數和類
app_config.py
:
app_name = "quick scraper"
mysql_db = ... # intended "global" variable that connects to database
main.py
:
from app_config import * # Getting shared variables
import app_library # See code app_library.py below
...
logger = logging.getLogger(app_name) # logger object to be shared later
...
app_library.dlAndSaveWebpage(url) # Module has key helper functions
...
app_library.py
:
import app_models_orm as app_models
def dlAndSaveWebpage(url)
# download and process url
...
app_models.Webpage.create(url=url, body=body)
app_models_orm.py
:
class MySQLModel(Model):
class Meta:
database = mysql_db
class Webpage(MySQLModel):
id = ...
...
類,因爲可變
mysql_db
不會在文件中存在的app_models_orm.py
MySQLModel
失敗。我可以做一個import app_config
,但我希望app_models_orm.py
被同一目錄中的多個腳本使用。如果我必須爲腳本導入一個自定義文件,那麼我必須複製這個模型文件,這看起來很奇怪和錯誤。同樣,我想用
app_library.py
通過在同一目錄中的多個腳本。從main.py
調用app_library
似乎有意義,但如果app_library
需要直接從app_config.py
引用變量,那麼我也必須複製app_library.py
。main.py
包含一個logger
對象,當所有這些代碼放在一個文件中時,所有的各種方法都可以訪問/使用。功能如何(或應該?)app_library.py
訪問記錄器類的這個實例?
再次感謝您的幫助。在這種情況下,請隨時「教我如何捕魚」:我看到很多關於使用全局導入文件的文章,但這並不意味着在未添加自定義導入的情況下共享後兩個文件的意圖,也不是幫助模型文件,導入時,由於該類正在尋找一個不在文件中的變量,因此會導致錯誤。可能有正確的方法來做這一切,我想你們中的許多人會知道如何。
您是否閱讀過http://docs.python.org/2/tutorial/modules.html?還有http://docs.python.org/dev/reference/import.html?後者大約是3.x,但它也應該適用於2.7。 –