python之BASE_DIR

本文探讨了在不同计算机上运行Python项目时遇到的模块查找问题,通过使用__file__和os.path.abspath()方法获取绝对路径,确保了项目在任何环境下都能正确加载模块。文章详细介绍了如何修改main.py文件,使其能够动态地将项目根目录添加到sys.path中,从而实现跨平台运行。
Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

目录结构如下:

logger.py

def logger():
    print('logging……')

main.py

from module import logger

def main():
    print(logger.logger())

bin.py

from module import main

main.main()

这样运行bin.py可以打印出logging……但是这样做是不对的,因为在pycharm下,pycharm将ATM项目的所在的绝对路径加到了sys.path里,所以在bin.py目录下程序可以找到module模块,但如果在命令行下运行bin.py文件module模块就找不到了。

pycharm帮我们做的事就是在sys.path里加上了ATM所在的绝对路径,我们可以自己在sys.path用append()方法加上。但是项目在不同的电脑上的绝对路径是不一样的,怎么样能保证程序在不同的电脑上都可以运行呢?

__file__内置变量就是取得当前目录的相对路径。

在pycharm里,pycharm又帮我们把相对路径变成了绝对路径,print(__file__)的结果是

E:/Python/python_demo/ATM/bin/bin.py

但是在命令行下运行的结果是这样的

怎么把相对路径变成绝对路径呢,os.path.abspath()方法就是把相对路径变成绝对路径。在bin.py文件里运行

import os

print(os.path.abspath(__file__))

在命令行下运行的结果

怎么取到bin.py所在目录的路径呢

print(os.path.dirname(os.path.abspath(__file__)))

在命令行的运行结果

 怎么取ATM文件所在的路径呢

print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

在命令行的运行结果

现在就找到了我们需要的绝对路径了,这个绝对路径在不同的电脑上有不同的结果。

现在的main.py文件的内容

import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

from module import main

main.main()

现在在命令行下运行的结果

 

您可能感兴趣的与本文相关的镜像

Python3.11

Python3.11

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python中,`remote_base_dir` 通常不是指某个特定的库或函数名,而是一个约定俗成的术语,表示远程服务器上的基础目录路径。它常出现在涉及文件传输、远程命令执行等操作的情景里,特别是在自动化部署脚本或是需要与远程系统交互的应用程序中。 ### 示例场景 假设你在编写一个自动化的任务处理工具,该工具负责将本地生成的日志文件上传至远程服务器并存储在一个指定位置。这时你可以设置 `remote_base_dir='/var/log/myapp/'` 来标识所有日志文件应当存放的基础路径。这使得你的代码更具可读性和维护性,并且容易根据不同环境调整配置项而不必修改核心逻辑部分。 #### 使用Paramiko结合`remote_base_dir` 当你使用像 `paramiko` 这样的SSH库时,可以通过设定 `remote_base_dir` 参数来简化对远端文件系统的访问。下面的例子演示了如何从本地复制文件到远程服务器的一个预设的基本目录下: ```python import os import paramiko def upload_files_to_remote(local_file_path, remote_base_dir): try: # 初始化SSH客户端 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接到远程服务器 ssh.connect('example.com', username='user', password='password') sftp = ssh.open_sftp() # 获取本地文件名以便构建完整的远程路径 file_name = os.path.basename(local_file_path) remote_full_path = f"{remote_base_dir}/{file_name}" print(f"Uploading {local_file_path} to {remote_full_path}") # 文件上传 sftp.put(local_file_path, remote_full_path) print("File uploaded successfully.") except Exception as e: print(f"Failed to upload files: {str(e)}") finally: if 'sftp' in locals(): sftp.close() if 'ssh' in locals(): ssh.close() if __name__ == "__main__": local_file = "/path/to/local/file.txt" base_directory_on_remote_server = '/home/user/uploads' upload_files_to_remote(local_file, base_directory_on_remote_server) ``` 在这个例子中,我们首先定义了一个名为 `upload_files_to_remote()` 的辅助函数,然后将其应用于具体的文件上载任务。这里的关键点在于正确拼接出最终的目标地址 (`remote_full_path`) ,即由用户提供的基础目录加上具体的文件名称组成。 --- 总结来说,虽然 `remote_base_dir` 不是Python标准库的一部分,但在许多网络编程实践中都是不可或缺的概念之一。理解它的作用可以帮助开发者更好地管理和组织跨平台的数据交换流程。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值