找不到 Python cli 模块导入



我正在尝试运行一个打包的cli,它执行动态导入。当我通过主 cli 脚本运行代码时,它按预期工作。但是,在我使用setup.py sdist打包代码然后使用 pip 安装 dist tar 之后。cli 本身会给出导入错误ImportError: No module named。所有模块都与cli.py文件位于同一文件夹中。

这就是我创建主要名称的方式cli.py

def main():
args = docopt(__doc__, version="1.0")
argv = [args['<command>']] + args['<args>']
module = importlib.import_module(args['<command>'])
print(docopt(module.__doc__, argv=argv))
if __name__ == '__main__':
main()

我的 setup.py 看起来像这样

from setuptools import setup
setup(
name='testing-cli',
version='0.0.1',
packages=['testing']
entry_points = {
'console_scripts': ['testing-cli = testing.cli:main'],
}
)

关于为什么打包时我在打包时出现导入错误但在像./cli.py <arg>一样运行时导入正常的任何想法?

脚本将从其目录导入模块,而不是从当前目录导入模块。这意味着如果你运行/some/directory/cli.py module,它将在/some/directory/module.py中查找module

我假设您正在使用其他模块从目录中运行cli.py,但是当它安装时,testing-cli转到某些不包含其他模块的/usr/local/bin。相反,它们存储在sys.path上的testing包中。所以你实际上需要这样做:

importlib.import_module("testing." + args['<command>'])

或者可能通过相对导入:

importlib.import_module("." + args['<command>'], package="testing")

这意味着当您从构建目录运行脚本时,您的脚本将停止工作,除非您安装了软件包。要解决此问题,请使用python setup.py develop,这会将软件包模拟安装到sys.path上。 (或者更直接,export PYTHONPATH=.这会将您当前的目录放在sys.path上,并使testing子目录显示为一个包(

相关内容

  • 没有找到相关文章

最新更新