colcon / colcon-core

Command line tool to build sets of software packages
http://colcon.readthedocs.io
Apache License 2.0
103 stars 46 forks source link

Crawling packages fails on Windows machine. #543

Closed agaertner closed 1 year ago

agaertner commented 1 year ago

Hey,

crawling suddenly fails on my windows machine (I am usually using Linux).

At first it worked but now I cannot get it to work ever. I even reinstalled ROS2-Humble and cleaned my environments.

  1. I have reinstalled python and created a virtual environment.

  2. Installed all neccessary ROS2_Humble packages and colcon-common-extensions.

  3. I source Visual Studio env and ROS2.

  4. Go into my workspace and do "colcon build --symlink-install" as usual and it won't find any packages even though my packages are located there and it should find them when searching the folders recursively. On my other workstation (Linux) it always works.

At first it failed silently but in the trial within a fresh venv I got:

(venv-minirov) PS F:\ros2_humble\ros2_ws> colcon build --symlink-install

Summary: 0 packages finished [0.14s]
WNDPROC return value cannot be converted to LRESULT
TypeError: WPARAM is simple, so must be an int object (got NoneType)
cottsay commented 1 year ago

Can you please take a look at the verbose output using colcon --log-level debug list or the like? It might be too much output to post here, but maybe the first several lines would be helpful.

agaertner commented 1 year ago
[0.351s] colcon DEBUG Command line arguments: ['I:\\Repositories\\_venvs\\venv-minirov\\Scripts\\colcon', '--log-level', 'debug', 'list']
[0.351s] colcon DEBUG Parsed command line arguments: Namespace(log_base=None, log_level=10, verb_name='list', build_base='build', ignore_user_meta=False, metas=['./colcon.meta'], base_paths=['.'], packages_ignore=None, packages_ignore_regex=None, paths=None, packages_up_to=None, packages_up_to_regex=None, packages_above=None, packages_above_and_dependencies=None, packages_above_depth=None, packages_select_by_dep=None, packages_skip_by_dep=None, packages_skip_up_to=None, packages_select_build_failed=False, packages_skip_build_finished=False, packages_select_test_failures=False, packages_skip_test_passed=False, packages_select=None, packages_skip=None, packages_select_regex=None, packages_skip_regex=None, packages_start=None, packages_end=None, topological_order=False, names_only=False, paths_only=False, topological_graph=False, topological_graph_dot=False, topological_graph_density=False, topological_graph_legend=False, topological_graph_dot_cluster=False, topological_graph_dot_include_skipped=False, verb_parser=<colcon_defaults.argument_parser.defaults.DefaultArgumentsDecorator object at 0x000001F574C4D2D0>, verb_extension=<colcon_package_information.verb.list.ListVerb object at 0x000001F574BFEF50>, main=<bound method ListVerb.main of <colcon_package_information.verb.list.ListVerb object at 0x000001F574BFEF50>>)
[0.412s] colcon.colcon_core.package_discovery Level 1 discover_packages(colcon_meta) check parameters
[0.412s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) check parameters
[0.412s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) check parameters
[0.412s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) check parameters
[0.412s] colcon.colcon_core.package_discovery Level 1 discover_packages(colcon_meta) discover
[0.412s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) discover
[0.412s] colcon.colcon_core.package_discovery INFO Crawling recursively for packages in 'F:\ros2_humble\ros2_ws'
[0.413s] colcon.colcon_core.package_identification Level 1 _identify(.) by extensions ['ignore', 'ignore_ament_install']
[0.413s] colcon.colcon_core.package_identification Level 1 _identify(.) by extension 'ignore'
[0.413s] colcon.colcon_core.package_identification Level 1 _identify(.) ignored
[0.413s] colcon.colcon_core.package_discovery Level 1 discover_packages(recursive) using defaults
[0.413s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) discover
[0.413s] colcon.colcon_core.package_discovery Level 1 discover_packages(ignore) using defaults
[0.413s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) discover
[0.413s] colcon.colcon_core.package_discovery Level 1 discover_packages(path) using defaults

log from F:\ros2_humble\ros2_ws\log\list_2022-12-21_10-55-02

agaertner commented 1 year ago

First, I had spaces in my setup.bat causing some variables not getting set (ie set myVar = "path/to/env.bat" failed due to the spaces around the assignment operator..... set myVar="path/to/env.bat"). This out of the way I found that --symlink-install doesn't report as much as a normal copy install does. When I tried once again it showed me that I forgot to run the VisualStudio environment beforehand so that VisualStudioVersion is set.

Now that I run the vcvarsall.bat x86_64 it finds my packages.

However, I encountered some other issues with python linking unrelated to colcon but ros2 using a virtual python env and some libraries like em conflicting with empy and after hours I gave up on Windows and just created VM with Ubuntu Jammy for now. Sadly WSL2 is too unstable still (Already have that behind me. Even build a custom linux kernel for getting xbox controllers to work with that crappy xbox interface).

I will just stop trying to make Windows work for anything outside of the C# Asp.Net domain. Just not worth the hassle.

Might just create a dual-boot later.

I wrote this just so if anyone is trying to make Windows work for anything related to science. Stop. Install another Linux distro. Preferably those recommended by whatever tool you use.

Thanks for trying to help though.

cottsay commented 1 year ago

log from F:\ros2_humble\ros2_ws\log\list_2022-12-21_10-55-02

This output suggests that the working directory (F:\ros2_humble\ros2_ws) contains an ignore marker, which explains the behavior you're experiencing.

Is it possible that you attempted to set the --install-base or --build-base to that directory instead of a subdirectory, which would have automatically created an ignore marker?

I had spaces in my setup.bat causing some variables not getting set

This sounds like a bug to me, but I can't find any such occurrences across any colcon or ament packages. Can you help me track it down?

...I found that --symlink-install doesn't report as much as a normal copy install does.

This shouldn't be the case, especially for CMake projects. I'm not booted into Windows right now so I can't give it a shot, but the console output on Linux is identical for --symlink-install, except that the Installing messages are replaced with Symlinking ones.

I'd like to encourage you to try following the official build guide for ROS 2 on Windows. I've personally run through these instructions recently and was able to compile ROS 2 successfully.

agaertner commented 1 year ago

Yes, I am usually setting --install-base and --build-base to my ros2_ws and source my package setup script. I have done so on my Linux workstation as well without issues.

I had spaces in my setup.bat causing some variables not getting set

This sounds like a bug to me, but I can't find any such occurrences across any colcon or ament packages. Can you help me track it down?

Don't worry. That's just a batch syntax thing. Simply removing the spaces around the assignment fixed it.

I'd like to encourage you to try following the official build guide for ROS 2 on Windows. I've personally run through these instructions recently and was able to compile ROS 2 successfully.

I am usually following these instructions, thank you. I might have forgotten to install the xmllint stuff under Install miscellaneous prerequisites.

After I cleaned my entire Windows machine I gave it another go and now it seems to build.