我是来自java的python的新手。我创建了一个名为“Project”的文件夹。在'Project'中,我创建了许多包(包含__init__.py
个文件),例如'test1'和'tests2'。 'test1'包含一个python脚本文件.py
,它使用'test2'中的脚本(从test2导入一个模块)。我想从命令行在'test1'中运行脚本x.py
。我怎么能这样做?
编辑:如果您对如何更好地整理文件有更好的建议,我将非常感激。 (注意我的java心态)
编辑:我需要从bash脚本运行脚本,所以我需要提供完整路径。
答案 0 :(得分:1)
可能有几种方法可以达到你想要的效果。
当我需要确保可执行脚本中的模块路径正确时,我做的一件事是获取父目录并插入模块搜索路径(sys.path
):
import sys, os
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.realpath(__file__))))
import test1 # next imports go here...
from test2 import something
# any import what works from the parent dir will work here
通过这种方式,您可以安全地运行脚本,而无需担心脚本的调用方式。
答案 1 :(得分:1)
Python代码被组织成模块和包。模块只是一个.py
文件,可以包含类定义,函数定义和变量。包是一个带有__init__.py
文件的目录。
标准Python项目可能如下所示:
thingsproject/
README
setup.py
doc/
...
things/
__init__.py
animals.py
vegetables.py
minerals.py
test/
test_animals.py
test_vegetables.py
test_minerals.py
setup.py文件描述了有关项目的元数据。请参阅Writing the Setup Script,尤其是installing scripts上的部分。
Entry points用于帮助在Python中分发命令行工具。入口点在setup.py
中定义如下:
setup(
name='thingsproject',
....
entry_points = {
'console_scripts': ['dog = things.animals:dog_main_function']
},
...
)
效果是,使用python setup.py install
安装软件包时,会根据您的操作系统在某个合理的位置自动创建脚本,例如/usr/local/bin
。然后,该脚本会调用dog_main_function
包的animals
模块中的things
。
另一个要考虑的Python约定是__main__.py
file。这表示目录中的“main”脚本或充满python代码的zip文件。这是使用命令行参数的argparse解析器为代码定义命令行界面的好地方。
Python Packaging User Guide可以找到关于Python包装有点混乱的世界的最新信息。