I’d like my OpenTAP package to install Python dependencies specified in a requirements.txt file within the install action. I’m currently using Windows.
The following works fine:
<PackageActionExtensions>
<ActionStep ExeFile="pip" Arguments='install -r "C:\Program Files\OpenTAP\Packages\Python\my_plugin_name\requirements.txt"' ActionName="install" />
</PackageActionExtensions>
However, when I use "%TAP_PATH%\Packages\Python\my_plugin_name\requirements.txt"
instead of hardcoding the path, I’m getting the following error:
13:23:05.582 Plugin ERROR: Could not open requirements file: [Errno 2] No such file or directory: '%TAP_PATH%\\Packages\\Python\\my_plugin_name\\requirements.txt'
Using pip install -r "%TAP_PATH%\Packages\Python\my_plugin_name\requirements.txt"
from cmd line doesn’t cause any issues.
I also tried a few more things:
… but nothing seems to work except for the full hardcoded path. Am I missing something?
It should work using a relative path, since package install actions are always executed from the directory containing the tap
executable. Did you try Packages/Python/my_plugin_name/requirements.txt
? If that doesn’t work I would call it a bug.
Edit:
And I should add that environment variables are never expanded in ActionStep
elements, so %TAP_PATH% / $TAP_PATH will be treated as a literal string
Thanks for the clarification about the env variables in action steps.
Regarding the relative path, I’ve already tried that as documentation suggests this way indeed. It causes a similar error: 14:19:54.191 Plugin ERROR: Could not open requirements file: [Errno 2] No such file or directory: 'Packages/Python/my_plugin_name/requirements.txt'
I just created a small example package to test this, and it seems to work fine for me:
<?xml version="1.0" encoding="UTF-8"?>
<Package Name="MyPythonPlugin" xmlns="http://opentap.io/schemas/package" InfoLink="" Version="0.1.0-alpha" OS="Windows,Linux">
<Description>This is my OpenTAP plugin package.</Description>
<Files>
<File Path="Packages/Python/MyPlugin/requirements.txt" SourcePath="requirements.txt"/>
</Files>
<PackageActionExtensions>
<ActionStep ExeFile="pip" Arguments="install -r Packages/Python/MyPlugin/requirements.txt" ActionName="install"></ActionStep>
</PackageActionExtensions>
</Package>
Can you share your package.xml
file?
1 Like
Looking at your example I was able to spot the difference: you added the requirements.txt
explicitly whereas I forgot. I was not getting errors when using the full path because the file was present in this folder due to a directory junction from my source code. My guess it was not taken into account by Package manager as it was not “owning” it.
Thanks for your help!
1 Like
Great, I’m glad you worked it out.
Happy tapping!
2 Likes