如何以编程方式将Python模块中的文件作为_main__(Python-m path.to.file)执行?

如何以编程方式将Python模块中的文件作为_main__(Python-m path.to.file)执行?,python,python-module,Python,Python Module,我有几个Python脚本(由于导入),必须使用Python的-m选项调用它们 我想为他们制作一个快捷脚本,就像代理一样 例如,当用户运行命令时 ./train.py arg1 arg2 ... 脚本应该做与 python -m some.path.train arg1 arg2 ... 可以。开关-m使用了一点技巧(比如);不要试图模仿那一点 相反,让脚本和\uuuuu main\uuuuu.py使用相同的函数;不要将所有功能都放在\uuuu main\uuuu.py中 因此,在\uuuu

我有几个Python脚本(由于导入),必须使用
Python
-m
选项调用它们

我想为他们制作一个快捷脚本,就像代理一样

例如,当用户运行命令时

./train.py arg1 arg2 ...
脚本应该做与

python -m some.path.train arg1 arg2 ...

可以。

开关
-m
使用了一点技巧(比如);不要试图模仿那一点

相反,让脚本和
\uuuuu main\uuuuu.py
使用相同的函数;不要将所有功能都放在
\uuuu main\uuuu.py

因此,在
\uuuu main\uuuuuu.py
中,执行以下操作:

import sys
from some.path.train import main

main(*sys.argv[1:])
train.py
脚本中执行完全相同的操作:

import sys
from some.path.train import main

main(*sys.argv[1:])
如果您必须将代码放入
\uuuu main\uuuuuuuuuupy
,我仍然会将其设置为一个函数,然后您可以为
train.py
脚本导入该函数:

from some.path.train.__main__ import main
您可以使用从函数生成
train
控制台脚本:

setup(
    # other arguments here...
    entry_points={
        'console_scripts': [
            'train = some.path.train:main',
        ],
    }
)
或使用

'train = some.path.train.__main__:main',

如果将函数放入
\uuuu main\uuuu.py
模块中。

-m
开关使用了一些技巧(如);不要试图模仿那一点

相反,让脚本和
\uuuuu main\uuuuu.py
使用相同的函数;不要将所有功能都放在
\uuuu main\uuuu.py

因此,在
\uuuu main\uuuuuu.py
中,执行以下操作:

import sys
from some.path.train import main

main(*sys.argv[1:])
train.py
脚本中执行完全相同的操作:

import sys
from some.path.train import main

main(*sys.argv[1:])
如果您必须将代码放入
\uuuu main\uuuuuuuuuupy
,我仍然会将其设置为一个函数,然后您可以为
train.py
脚本导入该函数:

from some.path.train.__main__ import main
您可以使用从函数生成
train
控制台脚本:

setup(
    # other arguments here...
    entry_points={
        'console_scripts': [
            'train = some.path.train:main',
        ],
    }
)
或使用

'train = some.path.train.__main__:main',

如果将函数放入
\uuu main\uuuu.py
模块中。

我找到了一个非常简单的解决方案

train.py
中,我将行放在下面:

from some.path import train

它没有将
\uu name\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
设置为
“\uuuuuuuuuu main\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu

train.py
中,我将行放在下面:

from some.path import train

它不会将
\uuu name\uuuuuuuuu
设置为
“\uuuu main\uuuuuuuuuuuu”
,但我从来没有检查过,所以对我来说这不是问题。

是不是
train.py
应该找出
一些.path.
?因为这甚至不一定是唯一的…@mgilson不,路径应该是硬编码的。
train.py
应该算出
一些.path。
?因为这不一定是唯一的…@mgilson不,路径应该是硬编码的。我想知道是否有可能在不修改代码的情况下模拟
-m
开关,但我想你说服了我改变主意。在模块内部的train.py中,只有一些函数声明和一些指令(我不检查模块是否等于
\uuuuu main\uuuuuu
等,所以我不必进行模拟)。唯一迫使我使用笨重的
python-m…
的是从上层目录导入的内容也许你会想出别的办法。@Luke:试图模拟
-m
开关恰恰是。。一场愚人游戏,根本没有意义。当运行
training.py
时,您只需确保模块搜索路径中有
一些
,真的。我想当运行
/some/path/train.py
时,我需要在模块搜索路径中有
/some
/some/path
,因为
train.py
/***
下的其他文件中导入了各种内容,这些文件导入了其他文件等,然后出现了关于可用性的问题。如何设置模块搜索路径,以便用户可以直接调用
/some/path/train.py
,而无需额外努力?@Luke:不,您不希望路径中包含
/some
/some/path
。您希望搜索路径中有
,以便
导入一些
查找
/some
。我想知道是否可以在不修改代码的情况下模拟
-m
开关,但我想您说服了我改变主意。在模块内部的train.py中,只有一些函数声明和一些指令(我不检查模块是否等于
\uuuuu main\uuuuuu
等,所以我不必进行模拟)。唯一迫使我使用笨重的
python-m…
的是从上层目录导入的内容也许你会想出别的办法。@Luke:试图模拟
-m
开关恰恰是。。一场愚人游戏,根本没有意义。当运行
training.py
时,您只需确保模块搜索路径中有
一些
,真的。我想当运行
/some/path/train.py
时,我需要在模块搜索路径中有
/some
/some/path
,因为
train.py
/***
下的其他文件中导入了各种内容,这些文件导入了其他文件等,然后出现了关于可用性的问题。如何设置模块搜索路径,以便用户可以直接调用
/some/path/train.py
,而无需额外努力?@Luke:不,您不希望路径中包含
/some
/some/path
。您希望在搜索路径中找到
,以便
导入一些
查找
/一些