一文讲懂Mac中的环境变量

news2024/11/15 7:19:32

你是否曾经因为环境变量配置不当而浪费了宝贵的开发时间?你是否好奇为什么有时候在终端输入命令会提示"command not found",而有时候又能正常运行?如果你是一名Mac用户,并且希望真正掌握环境变量的奥秘,那么这篇文章将为你揭开Mac中环境变量的神秘面纱,帮助你成为一名更高效的开发者。
image.png

目录

    • 什么是环境变量?
    • 为什么环境变量如此重要?
    • Mac中常见的环境变量
    • 如何查看Mac中的环境变量
    • 设置环境变量的方法
      • 临时设置
      • 永久设置
      • 系统级环境变量
    • 环境变量加载顺序
    • 常见问题和解决方案
      • 1. 环境变量没有生效
      • 2. PATH环境变量混乱
      • 3. 环境变量包含空格
      • 4. 子进程无法访问环境变量
      • 5. IDE或图形应用程序无法识别环境变量
      • 6. 版本管理工具(如pyenv, rbenv)与系统路径冲突
    • 环境变量最佳实践
    • 高级技巧:使用direnv管理项目特定的环境变量
      • 安装direnv
      • 使用direnv
      • 高级direnv用法
    • 总结

什么是环境变量?

环境变量是一种在操作系统中存储的动态命名值,可以影响系统中运行程序的行为。简单来说,它们就像是你电脑中的一个个小便签,上面记录着各种重要信息,这些信息可以被系统或其他程序读取和使用。

在Mac(以及其他Unix-like系统)中,环境变量通常表现为"键值对"的形式:

KEY=value

例如,一个常见的环境变量是PATH,它告诉系统在哪里查找可执行文件:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

image.png

为什么环境变量如此重要?

环境变量之所以重要,是因为它们在软件开发和系统管理中扮演着关键角色:

  1. 命令行工具的可用性: PATH环境变量决定了系统在哪里查找可执行文件。正确配置PATH可以让你在任何目录下使用命令行工具。

  2. 配置应用程序行为: 许多应用程序使用环境变量来确定其行为。例如,JAVA_HOME环境变量告诉Java应用程序在哪里找到Java运行时。

  3. 安全性: 某些环境变量用于存储敏感信息,如API密钥或数据库连接字符串,这样可以避免将这些信息硬编码到源代码中。

  4. 跨平台兼容性: 环境变量提供了一种在不同操作系统间共享配置的方法。

  5. 开发环境管理: 不同的项目可能需要不同版本的工具或库。通过环境变量,你可以轻松切换между不同的开发环境。
    image.png

Mac中常见的环境变量

让我们来看看Mac系统中一些常见且重要的环境变量:

  1. PATH:

    • 作用:指定系统查找可执行文件的目录列表。
    • 示例:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
  2. HOME:

    • 作用:指定当前用户的主目录。
    • 示例:/Users/yourusername
  3. USER:

    • 作用:当前登录用户的用户名。
    • 示例:yourusername
  4. SHELL:

    • 作用:指定当前用户的默认shell。
    • 示例:/bin/zsh
  5. LANG:

    • 作用:设置程序的语言和区域设置。
    • 示例:en_US.UTF-8
  6. JAVA_HOME:

    • 作用:指定Java开发工具包(JDK)的安装位置。
    • 示例:/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home
  7. PYTHONPATH:

    • 作用:指定Python查找模块的额外目录。
    • 示例:/Users/yourusername/projects/python_modules
  8. NODE_ENV:

    • 作用:指定Node.js应用程序的运行环境(如开发、生产等)。
    • 示例:development
  9. EDITOR:

    • 作用:指定默认的文本编辑器。
    • 示例:/usr/bin/vim
  10. TERM:

    • 作用:指定终端类型。
    • 示例:xterm-256color
      image.png

如何查看Mac中的环境变量

在Mac中,有several 线下查看环境变量的方法:

  1. 使用env命令:
    打开终端,输入以下命令:

    env
    

    这将列出所有当前设置的环境变量。

  2. 使用printenv命令:

    printenv
    

    这个命令的效果与env类似。

  3. 查看特定的环境变量:
    如果你只想查看某个特定的环境变量,可以使用echo命令:

    echo $PATH
    

    这将显示PATH环境变量的值。

  4. 使用set命令:

    set
    

    这个命令会显示所有的shell变量,包括环境变量。

  5. 在图形界面中查看:
    你也可以通过以下步骤在图形界面中查看系统环境变量:

    • 打开 “终端” 应用程序
    • 在菜单栏中选择 “Shell” > “新建窗口” > “系统环境变量”
      这将打开一个新的终端窗口,显示所有的系统环境变量。
      image.png

让我们通过一个实际的例子来演示如何查看和理解环境变量:

$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/opt/homebrew/bin

$ echo $HOME
/Users/yourusername

$ printenv | grep JAVA
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home

在这个例子中,我们首先查看了PATH环境变量,它显示了一系列由冒号分隔的目录。这些目录就是系统查找可执行文件的地方。然后我们查看了HOME环境变量,它指向当前用户的主目录。最后,我们使用grep命令过滤出包含"JAVA"的环境变量,这里显示了JAVA_HOME的设置。

理解这些环境变量的含义和作用,对于排查问题和优化开发环境至关重要。例如,如果你安装了一个新的命令行工具,但在终端中无法使用,很可能是因为它的安装目录没有被添加到PATH环境变量中。

设置环境变量的方法

在Mac中设置环境变量有两种主要方法:临时设置和永久设置。让我们详细探讨这两种方法。

临时设置

临时设置的环境变量只在当前终端会话中有效。一旦关闭终端窗口或重启电脑,这些设置就会失效。

  1. 使用export命令:

    export MY_VARIABLE="Hello, World!"
    

    这会创建一个名为MY_VARIABLE的新环境变量。

  2. 在命令前设置:

    MY_VARIABLE="Hello, World!" python my_script.py
    

    这种方法只为特定命令设置环境变量。

示例:假设你正在开发一个Python应用,需要临时设置一个API密钥:

$ export API_KEY="your-secret-api-key"
$ python
Python 3.9.5 (default, May  4 2021, 03:33:11) 
[Clang 12.0.0 (clang-1200.0.32.29)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> print(os.environ.get('API_KEY'))
your-secret-api-key
>>> exit()

$ echo $API_KEY
your-secret-api-key

$ # 关闭终端后,再次打开新的终端窗口
$ echo $API_KEY
# 此时不会显示任何内容,因为环境变量已经失效

image.png

永久设置

如果你希望环境变量在重启后依然有效,你需要将它们添加到shell的配置文件中。对于大多数Mac用户来说,默认的shell是Zsh。

  1. 编辑~/.zshrc文件:

    nano ~/.zshrc
    
  2. 添加环境变量:
    在文件的末尾添加:

    export MY_VARIABLE="Hello, World!"
    
  3. 保存并退出:
    Ctrl+X,然后按Y,最后按Enter

  4. 重新加载配置文件:

    source ~/.zshrc
    

示例:让我们永久设置JAVA_HOME环境变量:

$ echo 'export JAVA_HOME=$(/usr/libexec/java_home)' >> ~/.zshrc
$ source ~/.zshrc
$ echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/jdk-15.jdk/Contents/Home

这个例子中,我们使用java_home工具动态获取Java安装路径,并将其设置为JAVA_HOME环境变量。通过将这行配置添加到~/.zshrc文件中,我们确保每次打开新的终端窗口时,这个环境变量都会被正确设置。

注意:如果你使用的是Bash而不是Zsh,你需要编辑~/.bash_profile~/.bashrc文件。

系统级环境变量

image.png

除了用户级的环境变量,Mac还允许设置系统级的环境变量,这些变量对所有用户都有效。

  1. 创建或编辑/etc/paths.d/目录下的文件:

    sudo nano /etc/paths.d/mypath
    
  2. 添加新的路径:
    在文件中添加新的路径,每行一个。

  3. 保存并退出

这种方法主要用于修改系统的PATH环境变量。对于其他类型的系统级环境变量,你可以编辑/etc/environment文件:

sudo nano /etc/environment

在这个文件中,你可以添加键值对形式的环境变量:

SYSTEM_WIDE_VARIABLE="This is a system-wide environment variable"

记住,修改系统级配置需要管理员权限,而且可能影响系统的稳定性,请谨慎操作。

环境变量加载顺序

image.png

了解Mac中环境变量的加载顺序对于解决冲突和优化配置至关重要。以下是Mac(使用Zsh作为默认shell)加载环境变量的大致顺序:

  1. /etc/zshenv
  2. ~/.zshenv
  3. /etc/zprofile
  4. ~/.zprofile
  5. /etc/zshrc
  6. ~/.zshrc
  7. /etc/zlogin
  8. ~/.zlogin

这个顺序意味着:

  • 系统级配置(/etc/下的文件)先于用户级配置(~/下的文件)加载。
  • zshenv文件最先加载,适合放置重要的环境变量。
  • zshrc文件在交互式shell中加载,适合放置别名(alias)和函数定义。
  • zlogin文件最后加载,适合放置登录后的设置。

理解这个加载顺序可以帮助你更好地组织你的环境变量配置。例如,如果你想要某个环境变量在所有情况下都可用(包括非交互式shell),你应该将它放在~/.zshenv中。

让我们通过一个实际的例子来说明这个加载顺序的重要性:

# 在 /etc/zshenv 中
export GLOBAL_VAR="Hello from global"

# 在 ~/.zshenv 中
export GLOBAL_VAR="Hello from user"
export USER_VAR="User specific"

# 在 ~/.zshrc 中
alias print_vars='echo $GLOBAL_VAR && echo $USER_VAR'

在这个例子中:

  • GLOBAL_VAR在系统级和用户级在这个例子中:
  • GLOBAL_VAR在系统级和用户级配置中都被定义了。
  • USER_VAR只在用户级配置中定义。
  • 我们在~/.zshrc中定义了一个别名来打印这些变量。

当我们打开一个新的终端窗口时,会发生以下情况:

$ echo $GLOBAL_VAR
Hello from user
$ echo $USER_VAR
User specific
$ print_vars
Hello from user
User specific

这个结果说明:

  1. 用户级的~/.zshenv中的设置覆盖了系统级的/etc/zshenv中的设置。
  2. ~/.zshrc中定义的别名成功加载并可以使用。

理解这种加载顺序可以帮助你解决环境变量冲突,并确保你的配置按预期工作。

常见问题和解决方案

在使用Mac的环境变量时,开发者可能会遇到一些常见问题。让我们来看看这些问题以及它们的解决方案:
image.png

1. 环境变量没有生效

问题: 你设置了一个新的环境变量,但是在新的终端窗口中无法使用。

解决方案:

  • 确保你已经正确地设置了环境变量,并且在正确的配置文件中设置(~/.zshrc~/.zshenv)。
  • 使用source命令重新加载配置文件:
    source ~/.zshrc
    
  • 如果问题仍然存在,尝试重启终端应用程序或注销并重新登录。

2. PATH环境变量混乱

问题: 某些命令无法找到,或者系统使用了错误版本的命令。

解决方案:

  • 检查你的PATH环境变量:
    echo $PATH
    
  • 确保重要的目录位于PATH的前面。你可以在~/.zshrc中重新设置PATH:
    export PATH="/usr/local/bin:$PATH"
    
  • 使用which命令检查特定命令的位置:
    which python
    

3. 环境变量包含空格

问题: 包含空格的环境变量值导致错误。

解决方案:

  • 在设置环境变量时使用引号:
    export MY_VAR="This is a value with spaces"
    

4. 子进程无法访问环境变量

问题: 在脚本或子进程中无法访问某些环境变量。

解决方案:

  • 确保变量已经被导出。使用export命令而不是简单的赋值:
    export MY_VAR="value"  # 正确
    MY_VAR="value"  # 错误,不会传递给子进程
    
  • 对于需要在所有情况下都可用的变量,将其设置在~/.zshenv文件中。

5. IDE或图形应用程序无法识别环境变量

问题: 在终端中设置的环境变量在IDE或其他图形应用程序中不可用。

解决方案:

  • 对于通过Dock启动的应用程序,你可能需要在~/.zshenv中设置环境变量。
  • 或者,你可以创建一个launchd.conf文件来设置全系统的环境变量:
    echo 'setenv MY_VAR value' | sudo tee -a /etc/launchd.conf
    
    然后重启系统使更改生效。

6. 版本管理工具(如pyenv, rbenv)与系统路径冲突

问题: 安装了版本管理工具后,系统使用了错误版本的解释器。

解决方案:

  • 确保版本管理工具的初始化脚本正确添加到你的shell配置文件中。
  • 例如,对于pyenv,在~/.zshrc中添加:
    eval "$(pyenv init -)"
    
  • 确保这些初始化命令在PATH修改之后。

通过理解这些常见问题和解决方案,你可以更好地管理Mac中的环境变量,避免因配置错误而浪费宝贵的开发时间。

环境变量最佳实践

image.png

为了更有效地使用环境变量并避免潜在的问题,这里有一些最佳实践建议:

  1. 使用有意义的名称:
    选择清晰、描述性的名称for 环境变量。例如,使用DATABASE_URL而不是DB_CONN

    export DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
    
  2. 避免敏感信息:
    不要在版本控制系统中存储包含敏感信息(如密码、API密钥)的环境变量。Instead,使用.env文件或专门的秘密管理工具。

    # .env file (不要提交到版本控制系统)
    API_KEY=your_secret_api_key
    
  3. 使用默认值:
    当使用环境变量时,提供默认值以增加代码的健壮性。

    # In a shell script
    ENVIRONMENT=${ENVIRONMENT:-development}
    
  4. 分组相关变量:
    使用前缀来组织相关的环境变量。

    export APP_NAME="MyApp"
    export APP_VERSION="1.0.0"
    export APP_DEBUG="true"
    
  5. 文档化:
    记录你的环境变量,包括它们的用途、可能的值和默认值。

    # DATABASE_URL: The connection string for the database
    # Format: postgresql://user:password@host:port/dbname
    # Default: postgresql://localhost:5432/myapp
    export DATABASE_URL="postgresql://localhost:5432/myapp"
    
  6. 使用工具管理多环境:
    对于需要在不同环境(开发、测试、生产)之间切换的项目,考虑使用如direnv这样的工具。

  7. 定期审查和清理:
    定期检查你的环境变量,移除不再使用的变量。

  8. 使用类型安全的封装:
    在应用程序代码中,使用类型安全的方法来访问环境变量。

    import os
    from typing import Optional
    
    def get_database_url() -> str:
        url = os.environ.get('DATABASE_URL')
        if url is None:
            raise ValueError("DATABASE_URL must be set")
        return url
    
    def get_debug_mode() -> bool:
        return os.environ.get('DEBUG', 'false').lower() == 'true'
    
  9. 版本控制环境变量模板:
    虽然不应该在版本控制中包含实际的环境变量值,但是可以包含一个模板或示例文件。

    # .env.example
    DATABASE_URL=postgresql://user:password@localhost:5432/dbname
    API_KEY=your_api_key_here
    DEBUG=false
    
  10. 使用环境特定的配置文件:
    对于不同的环境,使用不同的配置文件。

    # .zshrc
    if [ -f ~/.zshrc_local ]; then
        source ~/.zshrc_local
    fi
    

    然后,在每个环境中创建一个.zshrc_local文件,包含特定于该环境的设置。

通过遵循这些最佳实践,你可以创建一个更加健壮、安全和可维护的环境变量配置。这不仅可以提高你的开发效率,还可以减少由于环境配置错误而导致的问题。

高级技巧:使用direnv管理项目特定的环境变量

当你在多个项目之间切换工作时,管理项目特定的环境变量可能会变得复杂。这就是direnv发挥作用的地方。direnv是一个扩展shell的工具,它可以根据当前目录加载和卸载环境变量。

安装direnv

在Mac上,你可以使用Homebrew来安装direnv:

brew install direnv

安装后,你需要在你的shell配置文件(如~/.zshrc)中添加以下行:

eval "$(direnv hook zsh)"

使用direnv

  1. 创建.envrc文件:
    在你的项目目录中创建一个.envrc文件:

    cd /path/to/your/project
    touch .envrc
    
  2. 添加环境变量:
    .envrc文件中添加你的项目特定的环境变量:

    export PROJECT_NAME="MyAwesomeProject"
    export DATABASE_URL="postgresql://localhost:5432/myproject"
    export API_KEY="your_secret_api_key"
    
  3. 允许direnv:
    首次创建或修改.envrc文件后,你需要显式地允许direnv加载它:

    direnv allow
    

现在,每次你进入这个项目目录时,这些环境变量就会自动加载。当你离开目录时,它们会自动卸载。

高级direnv用法

  1. 继承环境变量:
    你可以使用dotenv命令来加载.env文件:

    # .envrc
    dotenv .env
    
  2. 根据环境加载不同的配置:

    # .envrc
    if [ "$ENVIRONMENT" = "production" ]; then
        dotenv .env.production
    else
        dotenv .env.development
    fi
    
  3. 添加目录到PATH:

    # .envrc
    PATH_add bin
    
  4. 设置项目特定的shell别名:

    # .envrc
    alias run="python manage.py runserver"
    
  5. 自动激活虚拟环境:

    # .envrc
    layout python3
    

通过使用direnv,你可以大大简化项目间的切换过程,确保每个项目都有正确的环境设置,而不会污染全局环境。

总结

在这篇文章中,我们深入探讨了Mac中环境变量的方方面面。我们学习了什么是环境变量,为什么它们如此重要,以及如何在Mac系统中查看、设置和管理它们。我们还讨论了常见问题及其解决方案,分享了一些最佳实践,并介绍了如何使用direnv这样的高级工具来管理项目特定的环境变量。

理解和正确使用环境变量可以:

  • 提高开发效率
  • 增强应用程序的安全性
  • 简化配置管理
  • 使项目更易于在不同环境之间迁移

记住,环境变量是强大的工具,但也需要谨慎使用。始终遵循安全最佳实践,特别是在处理敏感信息时。定期审查和更新你的环境变量配置,确保它们始终符合你的需求。

最后,我鼓励你深入探索本文中提到的工具和技术。实践是掌握这些概念的最好方法。尝试在你的下一个项目中应用这些知识,你会发现它们如何改变你的开发工作流程。

通过掌握Mac中的环境变量,你将成为一个更高效、更专业的开发者。祝你编码愉快!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2143237.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

BFS 解决边权为1的最短路问题

边权为1的最短路问题 最短路问题: 比如说从D->K,找出最短的那条,其中每条路都是有权值,此篇主要讲解的边权为1的最短路问题。 即边权都是一样的。 解法就是从起点开始,做一次BFS: 需要一个队列、一个…

深入理解IP地址分类及子网划分详解

在互联网时代,IP地址是网络通信的基础。无论是访问网站、发送电子邮件,还是进行数据传输,IP地址都扮演着至关重要的角色。本文将详细解析IP地址的分类及子网划分的原理,帮助你更好地理解网络架构及其应用。 一、什么是IP地址 IP…

通信工程学习:什么是TDMA时分多址

TDMA时分多址 TDMA(Time Division Multiple Access,时分多址)是一种在无线通信中广泛使用的多址接入技术。它通过将时间划分为不重叠的时间帧,并将每个时间帧进一步划分为多个时隙,每个时隙分配给不同的用户或通信系统…

8.JMeter+Ant(基于工具的实现接口自动化,命令行方式)

一、JMeterAnt(基于工具的实现接口自动化) 如果想要实现自动化,就必须使用命令行。 1.jmeter命令 -n 使用非界面的方式去执行脚本 -t 指定jmeter的脚本位置 -l 生成jtl报告,可以通过查看结果树来解析 -e 生产html格式的报告 -o …

p14 使用阿里云服务器的docker部署NGINX

拉取NGINX的镜像 这里因为之前已经配置过从阿里云的镜像仓库里面拿镜像所以这里直接就执行docker pull nginx拉取NGINX镜像就OK了 运行NGINX镜像 这里执行docker run -d --name nginx01 -p 3344:80 nginx这里3344是服务器访问的端口80是容器内部的端口,可以看到…

Flask-JWT-Extended登录验证, 不用自定义

"""安装:pip install Flask-JWT-Extended创建对象 初始化与app绑定jwt JWTManager(app) # 初始化JWTManager设置 Cookie 的选项:除了设置 cookie 的名称和值之外,你还可以指定其他的选项,例如:过期时间 (max_age)&#xff1…

【贪心】【数据结构-小根堆,差分】力扣2406. 将区间分为最少组数

给你一个二维整数数组 intervals ,其中 intervals[i] [lefti, righti] 表示 闭 区间 [lefti, righti] 。 你需要将 intervals 划分为一个或者多个区间 组 ,每个区间 只 属于一个组,且同一个组中任意两个区间 不相交 。 请你返回 最少 需要…

vue3 ref的用法及click事件的说明

1、ref可以定义一个简单的属性,也可以是一个复杂的列表、数组等等。 2、为什么要使用 ref?简单的let个变量不行吗?const个变量不行吗? 其实这个跟vue的响应式的系统有关,官方的说明如下: 3、为 ref() 标注…

VMWare中的Centos8:Errors during downloading metadata for repository ‘appstream‘

在VMWare的环境中,安装和部署好Centos8,待设置好网络环境后,安装部署C开发和编译环境,遇到报错: dnf gcc gcc-c -y 解决问题的办法如下, 1. 进入仓库源文件夹:cd /etc/yum.repos.d/ 2. 修改镜像配置{这…

计算机毕业设计 公寓出租系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Flask-Migrate的使用

组织一个 Flask 项目通常需要遵循一定的结构,以便代码清晰、可维护。下面是一个典型的 Flask 项目结构: my_flask_app/ │ ├── app/ │ ├── __init__.py │ ├── models.py │ ├── views.py │ ├── forms.py │ ├── templat…

微信电脑版聊天图片DAT格式文件转为普通JPG图片

1-7 本文章主要教你如何恢复微信聊天中的聊天图片,主要应用场景是,当你的微信被封号了,或者无法登录了,会导致微信聊天中的聊天图片没办法再打开,如果是重要的图片,那就有损失了,所以有了本文的…

【有啥问啥】弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法

弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法 引言 在视觉大模型领域,如何有效利用海量无标签图像数据是一个亟待解决的问题。传统的深度学习模型依赖大量人工标注数据&…

探索未来游戏边界:AI驱动的开放世界RPG引擎与UGC平台

在游戏产业的浩瀚星空中,一项革命性的技术正悄然升起,它不仅重塑了游戏开发的传统模式,更将玩家的创造力推向了前所未有的高度。今天,让我们一同走进这个由AI驱动的开放世界RPG游戏引擎与UGC(用户生成内容)平台的奇幻世界,探索其背后的无限可能。 产品定位:AI赋能,重…

AE VM5000 Platform VarioMatch Match Network 手侧

AE VM5000 Platform VarioMatch Match Network 手侧

Vue Application exit (SharedArrayBuffer is not defined)

vite配置 export default defineConfig { server: {cors: true, // 启用 CORSheaders: {Cross-Origin-Opener-Policy: same-origin,Cross-Origin-Embedder-Policy: require-corp,cross-origin-resource-policy: cross-origin}}, } 错误处理 报其它错误,如(Compi…

如何在 CentOS 上安装和使用 Neofetch(图文教程)

Neofetch 是一个用来在命令行界面显示系统信息的工具。它可以展示操作系统、内核版本、CPU、内存、桌面环境、主题、图标、终端等信息,并配合 ASCII 艺术图来美化输出。 一、安装步骤 1、添加yum源 curl -o /etc/yum.repos.d/konimex-neofetch-epel-7.repo https:/…

9.9watershed分水岭分割

实验原理 在计算机视觉中,分水岭算法(Watershed Algorithm)是一种基于形态学的分割方法,常用于图像分割。OpenCV 提供了 cv::watershed 函数来实现这一算法。分水岭算法的主要思想是将图像视为地形表面,其中像素强度值…

水下目标检测数据集 urpc2021

项目背景: 水下目标检测在海洋科学研究、水下考古、海洋资源勘探等多个领域具有重要的应用价值。由于水下环境的复杂性和多变性,传统的人工检测方法存在诸多限制,自动化检测技术的需求日益增加。URPC2021数据集旨在为水下目标检测提供高质量…

校园社团|基于springBoot的校园社团信息管理系统设计与实现(附项目源码+论文+数据库)

私信或留言即免费送开题报告和任务书(可指定任意题目) 目录 一、摘要 二、相关技术 三、系统设计 四、数据库设计 五、核心代码 六、论文参考 七、源码获取 一、摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信…