Commit 9b00cc9c authored by Kirill Smelkov's avatar Kirill Smelkov

bin: pyrunmain чтобы запустить модули в которых не сделано if __name__ == '__main__'

Например в ZODB есть ZODB.FileStorage.fsdump который в ZODB/setup.py
поставлен как

    entry_points = """
    [console_scripts]
    fsdump = ZODB.FileStorage.fsdump:main
    ...

т.е. после сборки оно сгенерирует отдельный файл со следующим содержимым

    #!/usr/bin/python
    # EASY-INSTALL-ENTRY-SCRIPT: 'ZODB3==3.9.7','console_scripts','fsdump'
    __requires__ = 'ZODB3==3.9.7'
    import sys
    from pkg_resources import load_entry_point

    if __name__ == '__main__':
        sys.exit(
            load_entry_point('ZODB3==3.9.7', 'console_scripts', 'fsdump')()
        )

т.е. программу можно будет запустить.

Но это после сборки. А in-tree программу не запустить.

Не уверен что добавление if __name__ == '__main__' примут в upstream
из-за entrypoint'а. Мне зачастую удобно работать in-tree, поэтому
добавляю простую утилиту для запуска таких программ.
parent ee38b888
#!/bin/sh
# как `python -m <module>` но ещё и явно запускает <module>.main()
# (нужно чтобы запустить модули в которых не сделано if __name__ == '__main__')
M=$1; shift
python -c "import sys; from $M import main; sys.exit(main())" $@
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment