2

我正在开发一个带有一些控制台脚本的 Python 包。由于包的布局方式(参见下面的示例),控制台脚本看不到他们尝试从中导入的包。

这是一个示例布局:

- my_package
    bin/some_script.py
    my_package/
      __init__.py
      a_module.py

我应该如何构建包,以便在处理 Python 包的内容时可以在“bin”中测试控制台脚本?

4

3 回答 3

1

这里有一个小技巧。

python < bin/some_script.py

从哪里bin/some_script.py导入my_package将从开发目录导入。

这假设您使用某种类似 bash 的 shell,<用作输入重定向。

于 2012-09-23T21:45:37.537 回答
0

我遇到了同样的问题,最后我在脚本的开头这样做了:

try:
    # this works after package has been installed using distutils for example
    import my_package
except ImportError:
    # this should work during dev time with the directory layout you describe
    rootpath = os.path.dirname(os.path.realpath(os.path.join(__file__, "../")))
    sys.path.insert(0, rootpath)
    try:
        import my_package
    except ImportError:
        print("*** my_package is not installed properly. Exiting.")
        sys.exit()

所以现在我可以从项目根目录执行控制台脚本:

bin/some_script.py --help

希望这可以帮助!

于 2013-02-26T13:01:34.633 回答
0
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'bin'))

所以,里面__init__.py

import os
import sys

sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'bin'))

import some_script

some_script.some_function()
于 2012-09-23T21:54:08.860 回答