我正在开发一个带有一些控制台脚本的 Python 包。由于包的布局方式(参见下面的示例),控制台脚本看不到他们尝试从中导入的包。
这是一个示例布局:
- my_package
bin/some_script.py
my_package/
__init__.py
a_module.py
我应该如何构建包,以便在处理 Python 包的内容时可以在“bin”中测试控制台脚本?
这里有一个小技巧。
python < bin/some_script.py
从哪里bin/some_script.py
导入my_package
将从开发目录导入。
这假设您使用某种类似 bash 的 shell,<
用作输入重定向。
我遇到了同样的问题,最后我在脚本的开头这样做了:
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
希望这可以帮助!
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()