我是一个Ruby程序员,致力于第一个Python程序包(我们称其为foo)。它的主要目的是作为命令行工具。我指定使用以下命令将其安装为可执行文件setup.py
:
setup(
entry_points={
'console_scripts': [
'foo = foo.cli:main'
]
}
)
foo/cli.py
包含:
import foo
def main():
# program logic here
if __name__ == '__main__':
main()
cli.py
需要引用foo.__version__
在中定义的引用foo/__init__.py
,但是当我在python foo/cli.py
本地运行以测试CLI时,import foo
将引发ImportError: No module named foo
。运行这样的单个文件时,如何让Python在foo包的上下文中看到cli.py?我的方法完全错误吗?您通常如何在本地测试使用setuptools的入口点定义的可执行文件?
您缺少将sys.path
或PYTHONPATH
变量修改为也包含foo /所在目录的信息。
在运行cli.py文件之前,在命令提示符下执行以下操作
codepython@vm-0:~/python/foo$ PYTHONPATH=$PYTHONPATH:~/python/;export PYTHONPATH
在这里,在我的设置富/是中存在〜/蟒蛇和存在_ INIT _.py中富/告诉Python解释FOO是一个包,而不是一个普通的目录。
现在您可以cd
进入foo /目录,然后运行python cli.py
。您将能够访问foo包的方法和函数。
或者,在main()中,您可以先修改,sys.path
以附加包含foo /的目录,然后执行其余逻辑
导入名为spam的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,它将在变量sys.path给出的目录列表中搜索名为spam.py的文件。sys.path从以下位置初始化:
包含输入脚本的目录(或当前目录)。PYTHONPATH(目录名称列表,语法与shell变量PATH相同)。取决于安装的默认值。初始化后,Python程序可以修改sys.path。包含正在运行的脚本的目录位于搜索路径的开始,在标准库路径的前面。这意味着将加载该目录中的脚本,而不是库目录中相同名称的模块。除非打算进行更换,否则这是一个错误。有关更多信息,请参见标准模块部分。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句