Workspace files¶
Warning
This feature is part of the new incubating features. This means that it is under development, and looking for user testing and feedback. For more info see Incubating section.
Workspaces are defined by the conanws.yml
and/or conanws.py
files that will define the “root” workspace folder.
conanws.yml¶
The most basic implementation of a workspace is a conanws.yml
file. It defines the workspace’s packages
(editable dependencies)
and products
(root consumers). For instance, a workspace conanws.yml
defining 2 packages
could be:
packages:
dep1/0.1:
path: dep1
dep2/0.1:
path: dep2
conanws.py¶
A conanws.yml
can be extended with a way more powerful conanws.py
that follows the same relationship as
a ConanFile
does with its conandata.yml
. If we want to dynamically define the packages
, for example based
on the existence of some name.txt
and version.txt
files in folders, the packages could be defined in conanws.py
as:
import os
from conan import Workspace
class MyWorkspace(Workspace):
def packages(self):
result = {}
for f in os.listdir(self.folder):
if os.path.isdir(os.path.join(self.folder, f)):
with open(os.path.join(self.folder, f, "name.txt")) as fname:
name = fname.read().strip()
with open(os.path.join(self.folder, f, "version.txt")) as fversion:
version = fversion.read().strip()
result[f"{name}/{version}"] = {"path": f}
return result
It is also possible to re-use the conanfile.py
logic in set_name()
and set_version()
methods, using the Workspace.load_conanfile()
helper:
import os
from conan import Workspace
class MyWorkspace(Workspace):
def packages(self):
result = {}
for f in os.listdir(self.folder):
if os.path.isdir(os.path.join(self.folder, f)):
conanfile = self.load_conanfile(f)
result[f"{conanfile.name}/{conanfile.version}"] = {"path": f}
return result
See also
Read the Workspace tutorial section.