Search code examples
conan

conan doesn't upload export/conanfile.py to remote


I have created customized OpenCV package using conan package manager and uploaded it to a remote storage.

Workflow:

  1. create package

    cd c:\path\to\conanfile.py
    conan create . smart/4.26 --profile ue4
    
  2. Export with conan export . opencv-ue4/3.4.0@smart/4.26

    Result:

    c:\path\> conan export . opencv-ue4/3.4.0@smart/4.26
    [HOOK - attribute_checker.py] pre_export(): WARN: Conanfile doesn't have 'url'. It is recommended to add it as attribute
    Exporting package recipe
    opencv-ue4/3.4.0@smart/4.26 exports_sources: Copied 3 '.patch' files: cmakes.patch, check_function.patch, typedefs.patch
    opencv-ue4/3.4.0@smart/4.26: The stored package has not changed
    opencv-ue4/3.4.0@smart/4.26: Exported revision: ceee251590f4bf50c4ff48f6dc27c2ed
    
  3. I upload everything to the remote:

    c:\path> conan upload -r bart opencv-ue4/3.4.0@rs7-smart/4.26 --all
    Uploading to remote 'bart':
    Uploading opencv-ue4/3.4.0@smart/4.26 to remote 'bart'
    Recipe is up to date, upload skipped
    Uploading package 1/1: 1d79899922d252aec6da136ce61bff640124c1c4 to 'bart'
    Uploaded conan_package.tgz -> opencv-ue4/3.4.0@smart/4.26:1d79 [23667.97k]
    Uploaded conaninfo.txt -> opencv-ue4/3.4.0@smart/4.26:1d79 [0.75k]
    Uploaded conanmanifest.txt -> opencv-ue4/3.4.0@smart/4.26:1d79 [11.81k]
    

Our remote storage runs on the Artifactory, and I can see in a browser that conanfile.py is not listed anywhere.

I can also verify that directory C:\Users\user\.conan\data\opencv-ue4\3.4.0\smart\4.26\export on my Windows PC does contain both conanfile.py and conanmanifest.txt

I am using Windows PC for doing all above.

Now I'm trying to consume that package on another machine, running Ubuntu Linux.

Here is my conanfile.txt

[requires]
opencv-ue4/3.4.0@smart/4.26

[generators]
json

Command and results

> conan install -g json . opencv-ue4/3.4.0@smart/4.26
Configuration:
[settings]
arch=x86_64
arch_build=x86_64
build_type=Release
compiler=gcc
compiler.libcxx=libstdc++
compiler.version=9
os=Linux
os_build=Linux
[options]
[build_requires]
[env]

opencv-ue4/3.4.0@smart/4.26: Not found in local cache, looking in remotes...
opencv-ue4/3.4.0@smart/4.26: Trying with 'bart'...
Downloading conanmanifest.txt completed [0.33k]
opencv-ue4/3.4.0@-smart/4.26: Downloaded recipe revision 0
ERROR: opencv-ue4/3.4.0@smart/4.26: Cannot load recipe.
Error loading conanfile at '/home/user/.conan/data/opencv-ue4/3.4.0/smart/4.26/export/conanfile.py': /home/user/.conan/data/opencv-ue4/3.4.0/smart/4.26/export/conanfile.py not found!

Running ls -la /home/user/.conan/data/opencv-ue4/3.4.0/smart/4.26/export/ shows that the directory indeed contains only file conanmanifest.txt

Below is the relevant part of the conanfile.py that I've used to build the package

from conans import ConanFile, CMake, tools

class OpenCVUE4Conan(ConanFile):
    name = "opencv-ue4"
    version = "3.4.0"
    url = ""
    description = "OpenCV custom build for UE4"
    license = "BSD"
    settings = "os", "compiler", "build_type", "arch"
    generators = "cmake"
    exports_sources = 'patches/cmakes.patch', 'patches/check_function.patch', 'patches/typedefs.patch'
    
    def requirements(self):
        self.requires("ue4util/ue4@adamrehn/profile")
        self.requires("zlib/ue4@adamrehn/{}".format(self.channel))
        self.requires("UElibPNG/ue4@adamrehn/{}".format(self.channel))

    def cmake_flags(self):
        flags = [
            "-DOPENCV_ENABLE_NONFREE=OFF",
           # cut 
        ]

        return flags

    def source(self):
        self.run("git clone --depth=1 https://github.com/opencv/opencv.git -b {}".format(self.version))
        self.run("git clone --depth=1 https://github.com/opencv/opencv_contrib.git -b {}".format(self.version))

    def build(self):
        # Patch OpenCV to avoid build errors
        for p in self.exports_sources:
            if p.endswith(".patch"):
                tools.patch(base_path='opencv', patch_file=p, fuzz=True)

        cmake = CMake(self)
        cmake.configure(source_folder="opencv", args=self.cmake_flags())
        cmake.build()
        cmake.install()

    def package_info(self):
        self.cpp_info.libs = tools.collect_libs(self)

Conan version both in Windows and in Linux is 1.54.0

How do I correctly upload and consume the package?

Update.

After conversation with @drodri in comments I have removed conanfile.py from exports_sources, deleted all conan-generated files in all PCs and removed uploaded files from the Artifactory.

Then I've rebuilt the package, re-exported and re-uploaded it.


Solution

  • The issue was in restrictions of our Artifactory. Admins have forbidden uploading .py files.