Opened 7 years ago
Closed 7 years ago
#1172 closed defect (fixed)
Problems encountered building bundle for Windows
| Reported by: | Tristan Croll | Owned by: | Conrad Huang |
|---|---|---|---|
| Priority: | major | Milestone: | |
| Component: | Tool Shed | Version: | |
| Keywords: | Cc: | Eric Pettersen, Greg Couch | |
| Blocked By: | Blocking: | ||
| Notify when closed: | Platform: | all | |
| Project: | ChimeraX |
Description
A somewhat catch-all list of issues encountered while building the Clipper and ISOLDE plugins for Windows:
- non-gui ChimeraX command-line switches (e.g.
ChimeraX -m pip ...,ChimeraX --nogui,ChimeraX --nogui --cmd ...) appear to do nothing. In all cases it simply immediately returns to the prompt.ChimeraX --cmd ...does work. I'm managing by starting the ChimeraX gui and runningdevel install .from the inside.
- it wasn't clear to me that
toolshed install xxxcould be used to install non-ChimeraX-specific wheels. I spent some time trying to figure out how to pip install the base Clipper-Python module. For what it's worth, the iPython magic!pip install xxxis really *quite* magic - it manages to install the wheel to the *system* Python rather than ChimeraX.
- #1147 is still a pain in the neck. I'm quite sure that in
bundle_builder._get_bundle_dirs(), line 500 should just be
return None, None
rather than raising an error - otherwise any bundle with a dependency that *isn't* a ChimeraX bundle fails at this point.
- In bundle_info.xml the <CLibrary> option is undocumented. Seems I've been getting by on luck up to now, using the <CModule> option for libraries that are actually just designed for ctypes and have no
PyInit__functions. The Windows build pipeline fails on linking under that scheme. I found <CLibrary> by looking through some core ChimeraX bundles. That works, once I amend bundle_builder.py to provide the ChimeraX core library directory (in_CLibrary.compile()at line 560):
compiler.add_library_dir(os.path.join(sys.exec_prefix, '..', 'lib')
That has me as far as successfully building the Clipper plugin. Will add to this if I find any other issues going forward into building ISOLDE.
Change History (10)
comment:1 by , 7 years ago
comment:2 by , 7 years ago
Additionally, the OpenMM libraries are in $CHIMERAX/bin, which isn't on bundle_builder's library path.
comment:3 by , 7 years ago
This one's more my fault, but worth mentioning. I built Clipper-Python against my system Python, which has a newer version of numpy installed compared to ChimeraX. This triggered ChimeraX to upgrade numpy (automatically choosing the non-MKL version) on installing Clipper-Python. ISOLDE's install then failed on attempting to import scipy.linalg, and some snooping with ProcMon shows that this was because it relied on the no-longer-present MKL runtime library. Will downgrade my system numpy to something older - but it's worth noting that there's a little fragility here.
comment:4 by , 7 years ago
Libraries specified as <CLibrary> in bundle_info.xml are building and making it through unit testing, but don't make it to the final installation directory.
comment:5 by , 7 years ago
... but after copying the missing libraries over manually, I can confirm that ISOLDE runs in Windows. Hooray!
For anyone interested, the necessary files are at https://drive.google.com/drive/folders/1aXPck_px4MiasNo3OtJG6pRRbLwB4eVG?usp=sharing. Install Clipper_Python...whl first, then ChimeraX_Clipper, then ChimeraX_ISOLDE, then copy lib_symmetry.dll into the ChimeraX_Clipper installation directory and the other loose DLLs into ISOLDE's installation directory.
comment:6 by , 7 years ago
The problem with the missing library dir is a simple typo in bundle_builder.py. At line 552,
if lib_dirs:
compiler.set_library_dirs(inc_dirs)
should of course be
if lib_dirs:
compiler.set_library_dirs(lib_dirs)
comment:7 by , 7 years ago
I think the simplest way to deal with the <CLibrary> compiled libraries not being copied is to have _CLibrary.compile() return the library name, then in make_wheel() at line 48:
for lib in self.c_libraries:
self.datafiles[self.package].append(
lib.compile(self.logger, self.dependencies, debug=debug))
comment:8 by , 7 years ago
| Status: | assigned → feedback |
|---|
comment:9 by , 7 years ago
As it happens, I *just* did a build for all three operating systems, and they're all fine.
comment:10 by , 7 years ago
| Resolution: | → fixed |
|---|---|
| Status: | feedback → closed |
That's great! I can finally close this ticket.
Can't link to OpenMM - the library files are
OpenMM.lib/OpenMM.dll, but bundle_builder is looking forlibOpenMM.lib.