- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Azure DevOps 从 python 模块运行测试。我有一个管道build设置来构建一个 yml 文件并使用经典编辑器。我收到一个错误,我的导入模块名称不正确。当我在本地运行它时,它工作得很好。
我的 Repo 结构:
我正在使用此命令作为批处理文件运行我的测试:
cd 测试用例
pytest -v test_msoffice.py
并给我错误:
______________________ ERROR collecting test_msoffice.py ______________________
ImportError while importing test module 'D:\a\1\s\testcases\test_msoffice.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
test_msoffice.py:7: in <module>
from util import utility_method_class
E ModuleNotFoundError: No module named util
有人请帮助我。
最佳答案
我在过去两天遇到了同样的症状。我假设您的包在本地位于一个名为 "util" 的目录中,带有(或根据您的评论没有)__init__.py
文件。这导致 python 将该目录下的所有模块识别为属于 utils 包。 (从 Python 3 开始,python 将在没有 __init__.py
的情况下管理对本地目录结构的“命名空间引用”)在 Pipeline 代理上,代码直接复制到 D:\a\1\s\- 因此 python 将认为该包被称为 "s"
我找到了以下解决方法:在管道中包含一个脚本,用于将源代码移动到一个新的适当命名的目录中,然后在那里进行测试。
我的管道 YAML 看起来像这样。它基于这样的假设,即您的 ADO 项目的名称与您的包的名称相同 - 因此在您的情况下,“util” 是为 ubuntu/bash 设置的。如果您必须在 Windows 代理上进行测试,那么脚本将需要移植,或者您可以切换到 ubuntu 代理并复制整个内容。
# Python package
# Create and test a Python package on multiple Python versions.
# Add steps that analyze code, save the dist with the build record, publish to a PyPI-compatible index, and more:
# https://learn.microsoft.com/azure/devops/pipelines/languages/python
trigger:
- azure-pipelines
- master
- pipeline/*
variables:
PythonPackagePath: ORIGINALVALUE
pool:
vmImage: ubuntu-latest
strategy:
matrix:
# Python27:
# python.version: '2.7'
# Python35:
# python.version: '3.5'
# Python36:
# python.version: '3.6'
# Python37:
# python.version: '3.7'
Python310:
python.version: '3.10'
steps:
- task: UsePythonVersion@0
inputs:
versionSpec: '$(python.version)'
displayName: 'Use Python $(python.version)'
- script: |
cd $(System.DefaultWorkingDirectory)
export ParentDir=${PWD%/*}
echo Setting PythonPackagePath to $ParentDir/$(System.TeamProject)
echo "##vso[task.setvariable variable=PythonPackagePath;]$ParentDir/$(System.TeamProject)"
displayName: 'Set Package Path'
- script: |
echo PythonPackagePath is $(PythonPackagePath)
echo Moving files from $(System.DefaultWorkingDirectory) to $(PythonPackagePath)
mv $(System.DefaultWorkingDirectory) $(PythonPackagePath)
echo SymLinking old Working Directory back in case needed
ln -s $(PythonPackagePath) $(System.DefaultWorkingDirectory)
ls -l $(System.DefaultWorkingDirectory)/..
displayName: 'Move Working Directory'
- script: |
python -m pip install --upgrade pip
pip install -r requirements.txt
displayName: 'Install dependencies'
# continueOnError: true
- script: |
export PYTHONPATH=$(PythonPackagePath)
echo PYTHONPATH is set to $PYTHONPATH
cd $(PythonPackagePath)
echo Working in:
pwd
pip install pytest pytest-azurepipelines
pip install pytest-cov
pytest --cov=. --cov-report=xml
displayName: 'pytest'
- task: PublishCodeCoverageResults@1
inputs:
codeCoverageTool: Cobertura
summaryFileLocation: '$(PythonPackagePath)/**/coverage.xml'
一路上我掉进的几个陷阱:
$(VariableName)
形式的 ADO 管道变量在步骤开始时解决,而不是在到达行时解决 - 因此您需要在使用前在上一步中设置变量。export ParentDir=..
也不export ParentDir=$(System.DefaultWorkingDirectory)/..
在第一种情况下,ParentDir 始终是当前工作目录的父目录,在第二种情况下,由于循环引用,符号链接(symbolic link)将失败。正则表达式 ${PWD%/*}
获取当前目录的值并返回到最后一个斜线的值。ln -s path/to/code/s path/to/code/PackageName
pytest 仍会考虑将包称为 sPYTHONPATH
不是绝对必要的,从正确的目录运行 pytest 似乎是配置中最稳定的选项无论测试是否在子文件夹中,这都有效。我的整体结构是:
FooBar
__init__.py
¦
-- Doomsday
__init__.py
Fuel.py
test_Fuel.py
...
¦
-- Utils
__init__.py
Maths.py
...
¦
--test
test_Maths1.py
test_Maths2.py
...
哪里:
from FooBar.Utils.Maths import prod
这些都正常工作关于python-3.x - Azure 管道找不到用户创建的 python 模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61639935/
我最近在我的机器上安装了 cx_Oracle 模块,以便连接到远程 Oracle 数据库服务器。 (我身边没有 Oracle 客户端)。 Python:版本 2.7 x86 Oracle:版本 11.
我想从 python timeit 模块检查打印以下内容需要多少时间,如何打印, import timeit x = [x for x in range(10000)] timeit.timeit("
我盯着 vs 代码编辑器上的 java 脚本编码,当我尝试将外部模块包含到我的项目中时,代码编辑器提出了这样的建议 -->(文件是 CommonJS 模块;它可能会转换为 ES6 模块。 )..有什么
我有一个 Node 应用程序,我想在标准 ES6 模块格式中使用(即 "type": "module" in the package.json ,并始终使用 import 和 export)而不转译为
我正在学习将 BlueprintJS 合并到我的 React 网络应用程序中,并且在加载某些 CSS 模块时遇到了很多麻烦。 我已经安装了 npm install @blueprintjs/core和
我需要重构一堆具有这样的调用的文件 define(['module1','module2','module3' etc...], function(a, b, c etc...) { //bun
我是 Angular 的新手,正在学习各种教程(Codecademy、thinkster.io 等),并且已经看到了声明应用程序容器的两种方法。首先: var app = angular.module
我正在尝试将 OUnit 与 OCaml 一起使用。 单元代码源码(unit.ml)如下: open OUnit let empty_list = [] let list_a = [1;2;3] le
我在 Angular 1.x 应用程序中使用 webpack 和 ES6 模块。在我设置的 webpack.config 中: resolve: { alias: { 'angular':
internal/modules/cjs/loader.js:750 return process.dlopen(module, path.toNamespacedPath(filename));
在本教程中,您将借助示例了解 JavaScript 中的模块。 随着我们的程序变得越来越大,它可能包含许多行代码。您可以使用模块根据功能将代码分隔在单独的文件中,而不是将所有内容都放在一个文件
我想知道是否可以将此代码更改为仅调用 MyModule.RED 而不是 MyModule.COLORS.RED。我尝试将 mod 设置为变量来存储颜色,但似乎不起作用。难道是我方法不对? (funct
我有以下代码。它是一个 JavaScript 模块。 (function() { // Object var Cahootsy; Cahootsy = { hello:
关闭。这个问题是 opinion-based 。它目前不接受答案。 想要改进这个问题?更新问题,以便 editing this post 可以用事实和引文来回答它。 关闭 2 年前。 Improve
从用户的角度来看,一个模块能够通过 require 加载并返回一个 table,模块导出的接口都被定义在此 table 中(此 table 被作为一个 namespace)。所有的标准库都是模块。标
Ruby的模块非常类似类,除了: 模块不可以有实体 模块不可以有子类 模块由module...end定义. 实际上...模块的'模块类'是'类的类'这个类的父类.搞懂了吗?不懂?让我们继续看
我有一个脚本,它从 CLI 获取 3 个输入变量并将其分别插入到 3 个变量: GetOptions("old_path=s" => \$old_path, "var=s" =
我有一个简单的 python 包,其目录结构如下: wibble | |-----foo | |----ping.py | |-----bar | |----pong.py 简单的
这种语法会非常有用——这不起作用有什么原因吗?谢谢! module Foo = { let bar: string = "bar" }; let bar = Foo.bar; /* works *
我想运行一个命令: - name: install pip shell: "python {"changed": true, "cmd": "python <(curl https://boot
我是一名优秀的程序员,十分优秀!