簡體   English   中英

如何將模塊導入為 __main__?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM