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