linux系统下自定义python程序的跨文件夹调用

本文详细介绍了在Python中如何自定义模块并进行调用,包括在同一文件夹下、跨文件夹(父子文件夹)及跨文件夹(子子同级文件夹)的三种常见场景。通过实例演示了如何正确设置目录结构和使用sys.path.append方法,以便在不同层级的文件夹间实现模块的相互引用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义模块调用

    我们在进行编码设计的时候,往往需要自定义一些模块,其他程序可以调用这些模块,方法和原理其实和内置系统模块调用是差不多的。不过自定义模块的话有几种位置关系。【实验环境:py3.6】

1 同一文件夹下:

在 test 文件夹下有 test1.py 和 test2.py

test/

-------------/ test1.py

-------------/test2.py

如果在test1.py中需要引用test2.py方法,此种情况可以直接使用 import test2,就可以进行 test2.*() 【*为test2.py中的某个函数】

2 跨文件夹引用(父子文件夹):

test/

-------------/ test1.py

-------------/test2.py

-------------/test1/test1_1.py

-------------/test1/test1_2.py

则从从上面的目录结构可以清晰知道,这里我在test文件夹下新建了 test1文件夹,test1文件夹下又有 test1_1.py, test1_2.py

这是如果 test1_1.py 与 test1_2.py 相互引用 仍和 【情况1】一样。如果 test1.py或者 test2.py 想要引用 test1_1.py 或者 test1_2.py 。则需要在 test1 文件夹下新建一个 __init__.py 文件,该文件可以为空。目录结构如下:

test/

-------------/ test1.py

-------------/test2.py

-------------/test1/test1_1.py

-------------/test1/test1_2.py

-------------/test1/__init__.py

另外由于,从目录结构可以看出test1.py和 test2.py与 test1 文件夹同级,在test1.py 或者 test2.py中调用 test1_1.py 或者 test1_2.py 时 可以直接使用  from test1 import test1_1,test1_2 ;

如果从 test1_1.py,test1_2.py 调用 test1.py 或者 test2.py 需要使用,注意 test文件夹下不用写__init__.py  

import sys

sys.path.append('..')

import test1,test2

【运行时侯注意是在 test1文件夹下,因为 sys.path.append(‘..’) 是相对路径】

3 跨文件夹引用(子子同级文件夹):

 这种引用是工程里最常用的引用方式。

test/

-------------/ test1.py

-------------/test2.py

-------------/test1/test1_1.py

-------------/test1/test1_2.py

-------------/test1/__init__.py

------------/test2/test2_1.py

-------------/test2/test2_2.py

-------------/test2/__init__.py

test1和test2均为test文件夹的子文件夹,test2_1.py 与 test1_1.py ,test1_2.py 进行互相引用时,需要使用:

import sys

sys.path.append('..')

from test1 import test1_1,test1_2

【运行时侯注意是在 test2文件夹下,因为 sys.path.append(‘..’) 是相对路径】

 

希望对您有帮助!

 

### Python 文件夹模块导入解决方案 当尝试在 Python文件夹引用模块时,如果遇到 `ModuleNotFoundError` 或者 `'No module named ...'` 的错误,通常是因为 Python 解释器无法找到目标模块所在的路径。以下是几种常见的解决方法: #### 方法一:修改 `sys.path` 可以通过动态调整 `sys.path` 来临时增加模块所在目录到 Python 的搜索路径中。 ```python import sys import os module_path = "/path/to/module" # 替换为目标模块的实际路径 if module_path not in sys.path: sys.path.append(module_path) # 此后可以直接导入目标模块 import your_module ``` 这种方法适用于运行脚本前手动指定额外的模块路径[^1]。 --- #### 方法二:使用相对导入 如果项目结构清晰,并且各模块之间存在父子关系,则可以利用相对导入来实现文件夹调用。 假设项目结构如下: ``` project/ │ ├── folder_a/ │ └── a.py │ └── folder_b/ └── b.py ``` 在 `b.py` 中要导入 `a.py`,可以在 `folder_b/__init__.py` 和 `folder_a/__init__.py` 文件中定义包初始化逻辑,随后通过以下方式完成导入: ```python from ..folder_a import a ``` 注意:此方法仅支持在同一顶层包内的子模块间相互引用[^3]。 --- #### 方法三:设置环境变量 `PYTHONPATH` 另一种永久性的解决方案是配置操作系统的环境变量 `PYTHONPATH`,使其包含所有自定义模块的位置。例如,在 Linux/MacOS 下可通过命令行执行: ```bash export PYTHONPATH="${PYTHONPATH}:/path/to/modules" ``` 而在 Windows 上则应这样写入批处理脚本或直接编辑系统属性中的 PATH 设置: ```cmd set PYTHONPATH=%PYTHONPATH%;C:\path\to\modules ``` 之后启动的新终端会话都会继承该更改后的值作为默认附加查找位置之一[^2]。 --- #### 方法四:创建软链接 (Symlink) 对于某些特定场景下不希望改动原有代码又想让其他地方能够访问某个固定地址上的资源时,可以考虑建立符号连接(symlinks)。比如在 Unix-like 系统上可以用 ln 命令生成指向实际源码树副本的一个快捷入口;而 NTFS 支持下的 Win7+ 版本也提供了类似的 Junction Points 功能。 --- #### 方法五:打包成独立的应用程序 最后一种极端情况是对最终用户提供完全封装好的产品形式交付成果——即将整个应用连同其所需的一切依赖项一起编译为单个可分发单元。像 PyInstaller 这样的工具可以帮助我们轻松达成这一目的。 ```python pip install pyinstaller pyinstaller --onefile your_script.py ``` 上述指令将会把指定 python 脚本及其关联资料组合起来形成单独 exe 文件(视操作系统定),从而彻底规避掉任何可能因缺少组件而导致崩溃的风险。 --- ### 总结 以上列举了几种常见应对策略用于克服 Python 在多级目录环境中寻找不到外部件难题的办法。具体采用哪一类取决于个人偏好以及当前项目的实际情况等因素综合考量决定最佳实践方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值