python module加载
init.py的作用
ros2 加载过程
ros2pkg 文件目录
|-- CHANGELOG.rst
|-- package.xml
|-- resource
| `-- ros2pkg
|-- ros2pkg
| |-- __init__.py
| |-- api
| | |-- __init__.py
| | `-- create.py
| |-- command
| | |-- __init__.py //说明这是一个包
| | `-- pkg.py
| |-- resource
| | |-- __init__.py
| | |-- ament_cmake
| | |-- ament_python
| | |-- cmake
| | |-- cpp
| | `-- package_environment
| `-- verb
| |-- __init__.py
| |-- create.py
| |-- executables.py
| |-- list.py
| |-- prefix.py
| `-- xml.py
|-- setup.py
`-- test
|-- test_api.py
|-- test_cli.py
|-- test_copyright.py
|-- test_flake8.py
|-- test_pep257.py
`-- test_xmllint.py
当我们运行ros2 pkg list
时,会调用到rospkg包中,进入点,就是entry_points.txt中定义的
[ros2cli.command]
pkg = ros2pkg.command.pkg:PkgCommand
[ros2cli.extension_point]
ros2pkg.verb = ros2pkg.verb:VerbExtension
[ros2pkg.verb]
create = ros2pkg.verb.create:CreateVerb
executables = ros2pkg.verb.executables:ExecutablesVerb
list = ros2pkg.verb.list:ListVerb
prefix = ros2pkg.verb.prefix:PrefixVerb
xml = ros2pkg.verb.xml:XmlVerb
当运行ros2 pkg list
,首先是进入这个函数
from ros2cli.command import add_subparsers_on_demand #导入方法用于命令解决
from ros2cli.command import CommandExtension #导入类
class PkgCommand(CommandExtension):
"""Various package related sub-commands."""
def add_arguments(self, parser, cli_name):
self._subparser = parser
# add arguments and sub-commands of verbs
add_subparsers_on_demand(
parser, cli_name, '_verb', 'ros2pkg.verb', required=False)
def main(self, *, parser, args):
if not hasattr(args, '_verb'): #hasattr() 函数用于判断对象是否包含对应的属性。
# in case no verb was passed
self._subparser.print_help()
return 0
extension = getattr(args, '_verb') #函数用于返回一个对象属性值。
# call the verb's main method
return extension.main(args=args)
‘list = ros2pkg.verb.list:ListVerb’
from ros2pkg.api import get_package_names
from ros2pkg.verb import VerbExtension
class ListVerb(VerbExtension):
"""Output a list of available packages."""
def main(self, *, args):
for pkg_name in sorted(get_package_names()):
print(pkg_name) #打印出包名
get_package_names实现在ros2pkg/api/init.py 文件
def get_package_names():
return get_packages_with_prefixes().keys()
#定义在ros2下面install/lib/python3.6/site-packages/ament_index_python/packages.py文件里
def get_packages_with_prefixes():
"""
Return a dict of package names to the prefixes in which they are found.
:returns: dict of package names to their prefixes
:rtype: dict
"""
return get_resources('packages')
#install/lib/python3.6/site-packages/ament_index_python/resources.py
def get_resources(resource_type):
"""
Get the resource names of all resources of the specified type.
:param resource_type: the type of the resource
:type resource_type: str
:returns: dict of resource names to the prefix path they are in
:raises: :exc:`EnvironmentError`
"""
assert resource_type, 'The resource type must not be empty'
resources = {
}
for path in get_search_paths():
resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type)
if os.path.isdir(resource_path):
for resource in os.listdir(resource_path):
# Ignore subdirectories, and anything starting with a dot
if os.path.isdir(os.path.join(resource_path, resource)) \
or resource.startswith('.'):
continue
if resource not in resources:
resources[resource] = path
return resources
最终回调到 lib/python3.6/site-packages/ament_index_python/search_paths.py 文件
import os
from .constants import AMENT_PREFIX_PATH_ENV_VAR
def get_search_paths():
"""
Get the paths from the environment variable '{AMENT_PREFIX_PATH_ENV_VAR}'.
:returns: list of paths
:raises: :exc:`EnvironmentError`
""".format(AMENT_PREFIX_PATH_ENV_VAR=AMENT_PREFIX_PATH_ENV_VAR)
ament_prefix_path = os.environ.get(AMENT_PREFIX_PATH_ENV_VAR)
if not ament_prefix_path:
raise EnvironmentError(
"Environment variable '{}' is not set or empty".format(AMENT_PREFIX_PATH_ENV_VAR))
paths = ament_prefix_path.split(os.pathsep)
return [p for p in paths if p and os.path.exists(p)]
AMENT_PREFIX_PATH_ENV_VAR 赋值是
lib/python3.6/site-packages/ament_index_python/constants.py:17:AMENT_PREFIX_PATH_ENV_VAR = 'AMENT_PREFIX_PATH'
也就是我们配置环境变量AMENT_PREFIX_PATH
如果遇到找不到包的情况,多数没有配置路径AMENT_PREFIX_PATH
文章浏览阅读1.1k次。在if中import引入插件昨天发生产忘记注释移动端的Vconsole插件把他带到了生产环境,整个人真是裂开了。因为impor不能直接在if中使用。之前一直都是发生产的时候手动注释引入和调用。但是昨天忘记注释了就很尴尬。之后查资料发现两种可以判断环境的引入方式异步引入(我没用这种试了一下没生效就没理他,但是看其它文章说是他是可以的)if(process.env.env == "test" || process.env.env == "devTest"){ import("vconsole").t_if import
文章浏览阅读1.3k次。在整个Gradle,有两个最基础的概念:项目 和 任务。Everything in Gradle sits on top of two basic concepts: projects and tasks.任何一个Gradle构建都是由一个或多个项目组成。一个项目代表着什么,取决于你想通过Gradle来做什么。比如,一个项目可能代表着一个JAR库,或者是一个Web应用程序。它也可能代表从其他项目所生成的JAR包组装起来的ZIP文件。一个项目不一定是代表一个要构建的东西,它也可能代表一个要完成的东西,比_output of gradle -q count
文章浏览阅读1k次。impala 安装具体安装步骤参照:https://gaoming.blog.csdn.net/article/details/107399914 里面包含完整的Hadoop组件安装。impala 使用登录impala-shell同步hive元数据invalidate metadata; #同步hive元数据show databases; #查看同步之后的数据库创建数据库create database db_hive_test;在impala-shell端创建_impala连接hive 方式
文章浏览阅读607次。目录 java基础 集合 异常 反射 注解 内部类 泛型 序列化 网络编程 JVM JVM GC 并发编程 _offrr来了
文章浏览阅读491次。mybatis 查询返回值映射异常具体异常异常理解解决方法具体异常org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'name' from result set. Cause: java.sql.SQLExc_cause: org.apache.ibatis.executor.result.resultmapexception: error attemptin
文章浏览阅读7k次。在使用CiteSpace之前要先下载数据源,今天就来讲一讲从web of science上导出txt文件。1、首先登陆web of science,没有注册的先注册2、在选择数据库下拉框中选择web of science 核心合集3、在基本检索里输入你的关键字,点击搜索4、如果超过500条要多次导出,如果小于500条记录单次导出即可(此处只有165条)。导出方法为:点击导出,然后点击其他格式,然后选择记录来源输入数值1到最大记录数165,文件格式选择纯文本格式,选择好后单击导出即_web of science怎么导出参考文献
文章浏览阅读959次,点赞21次,收藏24次。本篇论文发表于ACL-2022原文链接源码模态:图像+文本基于多模态方面的情感分析(MABSA)近年来越来越受到关注。然而,以前的方法要么(i)单独使用预训练的视觉和文本模型,忽略了跨模态的对齐;要么(ii)使用预训练的视觉语言模型,这些模型带有一般的预训练任务,这不足以识别细粒度的方面、观点及其跨模态的对齐。本文提出了一个针对MABSA的任务特定的视觉语言预训练框架(VLPMABSA),这是一个统一的多模态编码器-解码器架构,用于所有预训练和下游任务。_多模态情感分析论文
文章浏览阅读2.7w次,点赞13次,收藏28次。大学那会我玩魔兽世界,我的职业是法师,然后经常有朋友找我我带小号,带小号的方式是冲到血色副本里面把所有怪拉到一起,然后一起用AOE技能瞬间杀掉,在学校玩的时候没什么问题,但是放假在家的时候,我发现每次我拉好怪,放技能AOE的那个瞬间,很大概率会掉线,也不是网速问题,当时很多人也遇到同样的问题,看到个帖子说,把自己的MTU改成1480就行了,当时也不知道啥是MTU,就改了,发现还真的可以,就愉快地打..._1492 1500
文章浏览阅读122次。1.主库中的操作:1.1 查看数据库是否在归档与是否强制LOGGING模式。 SQL> select log_mode,force_logging from v$database;..._11.2.0.3 rac adg
文章浏览阅读175次。通过一滴汗或血液,就可以测量人体十几项健康指标,或是提前预测癌症等大中型疾病,你认为这样近乎无创的医疗检测服务应该值多少钱?答案是,要么只能前往拥有专业仪器的医院来一套专项检查,要么就花上数百美元的价格购买一套家..._微型传感器怎么样
文章浏览阅读120次。每日一练,突破自我,梦想无惧算法!_123290393
文章浏览阅读555次。移动端的Android测试总是少不了一些adb命令的操作,稍微总结一下自己经常用到的命令。例如:adb无法安装debug包,提示Failure [INSTALL_FAILED_TEST_ONLY],怎么办?莫慌,加个-t参数即可$ adb install -t debug.apk这一点在adb的说明中有明确的提示, -t 即表示允许test package$ adb........._"adb -s \" + device + \" shell dumpsys gfxinfo \" + package_name + \" framestats"