[英]How to import a module as __main__?
我有一個具有通常的模塊
if __name__ == '__main__':
do stuff...
成語。
我想從另一個模塊導入它,並欺騙它運行該代碼。 有沒有辦法做到這一點?
我應該提到,由於我不會在這里討論的原因,我無法更改導入模塊中的代碼。 我需要以某種方式修改導入過程,以便在導入時它的名稱是主要的,也許使用 ihooks 或類似的。
正如其他答案中所指出的,這是一個壞主意,您應該以其他方式解決問題。
無論如何,Python 的方式是這樣的:
import runpy
result = runpy._run_module_as_main("your.module.name"))
有,執行腳本而不是導入它。 但我認為這是一個非常黑客的解決方案。
然而,理想的模式是:
def do_stuff():
... stuff happens ...
if __name__ == '__main__':
do_stuff()
這樣你可以這樣做:
from mymodule import do_stuff
do_stuff()
編輯:在澄清無法編輯模塊代碼后回答。
我永遠不會在任何生產代碼中推薦這個,這是一個“自擔風險”的解決方案。
import mymodule
with open(os.path.splitext(mymodule.__file__)[0] + ".py") as fh:
exec fh.read()
將該代碼放在一個函數中,並從您將其導入的模塊中調用它。
def stuff():
...
if __name__ == '__main__':
stuff()
然后在您將其導入的模塊中:
import module
module.stuff()
已經給出了正確答案,但它僅限於評論(請參閱如何將模塊導入為 __main__?和如何將模塊導入為 __main__? )。
與正確的格式相同:
import runpy
runpy.run_module("your.module.name", {}, "__main__")
或者
import runpy
runpy.run_path("path/to/my/file.py", {}, "__main__")
主節中的代碼直接運行通常沒有意義。 如果要運行它,請使用subprocess
在另一個 Python 解釋器中運行它。
以下是 Python 中主模塊的示例:
#! /usr/bin/env python
import sys
import os
def main(arg1, arg2, arg3):
print(arg1, arg2, arg3)
if __name__ == "__main__":
main(*sys.argv)
但你也可以包括
def main():
#The module contains Python code specific to the library module,
#like tests, and follow the module with this:
if __name__ == "__main__":
main(*sys.argv)
在任何你想作為主運行的模塊中。
例如,如果你有一個庫模塊,你總是可以使用這個結構來執行一些特定的事情,比如測試。
把它放在一個函數中:
def _main():
do stuff
if __name__ == '__main__':
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.