虚拟环境中自定义Python库访问外部文件及权限问题求助
解决自定义库aiautotest中adb工具的PermissionError问题
这个问题核心是两个原因:一是你的setup.py配置没正确包含adb可执行文件,二是打包安装时adb的执行权限丢失了。下面一步步搞定:
1. 修正package_data配置,确保adb被完整打包
你当前的package_data只匹配了core/android/static/*,但adb在core/android/static/adb/mac/子目录下,需要递归包含所有子文件。修改这部分配置:
package_data={ 'aiautotest': ["config/*"], 'airtest': ["report/*", "core/android/static/**/*"] # 用**/*递归匹配所有子目录文件 },
这样打包时才会把adb可执行文件和相关目录都包含进去。
2. 恢复adb的执行权限
打包成egg文件时,文件的可执行权限通常不会被保留,所以安装后adb没有执行权限,才会触发PermissionError。有两种解决方式:
方法一:手动添加权限(快速临时修复)
找到虚拟环境中adb的实际路径,比如你报错里的路径:
/Users/xmly/venv/aiautotest/lib/python3.7/site-packages/aiautotest-1.0-py3.7.egg/airtest/core/android/static/adb/mac/adb
执行命令赋予执行权限:
chmod +x /Users/xmly/venv/aiautotest/lib/python3.7/site-packages/aiautotest-1.0-py3.7.egg/airtest/core/android/static/adb/mac/adb
方法二:在setup.py中配置自动权限(永久解决)
通过自定义安装命令,让安装完成后自动给adb加执行权限。修改后的setup.py如下:
from setuptools import find_packages, setup from setuptools.command.install import install import os class CustomInstall(install): def run(self): # 先执行默认安装流程 install.run(self) # 定位adb文件路径 adb_path = os.path.join(self.install_lib, 'airtest', 'core', 'android', 'static', 'adb', 'mac', 'adb') # 赋予执行权限 if os.path.exists(adb_path): os.chmod(adb_path, 0o755) # 0o755表示所有者可读写执行,其他用户可读可执行 setup( name='aiautotest', version='1.0', packages=find_packages(), package_data={ 'aiautotest': ["config/*"], 'airtest': ["report/*", "core/android/static/**/*"] }, entry_points=""" [console_scripts] aiautotest = aiautotest.__main__:main """, cmdclass={'install': CustomInstall} # 注册自定义安装命令 )
之后重新打包安装(python setup.py bdist_egg和python setup.py install),安装过程会自动给adb加上执行权限。
验证修复效果
重新运行你的测试代码,应该不会再出现PermissionError了。如果还有问题,可以检查adb路径是否正确,或者确认权限是否真的被赋予。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

