[MacPorts] #55541: Installing a Python wheel (whl) file using a port

MacPorts noreply at macports.org
Mon Dec 18 12:18:03 UTC 2017


#55541: Installing a Python wheel (whl) file using a port
--------------------------+-----------------
 Reporter:  emcrisostomo  |      Owner:
     Type:  request       |     Status:  new
 Priority:  Normal        |  Milestone:
Component:  ports         |    Version:
 Keywords:  python        |       Port:
--------------------------+-----------------
 Hi,

 I'm trying to create a port for TensorFlow and since I'm no Python expert
 I have some doubts about it.

 Here is TensorFlow's package on the Python Package Index:
 https://pypi.python.org/pypi/tensorflow/1.4.1. I realised (late) that this
 package is a wheel package and is meant to be installed with `pip` or
 `wheel`. Even the instruction to install TensorFlow from source
 (https://www.tensorflow.org/install/install_sources) describe the process
 of building a `whl` package and then install it with `pip`, so when I
 realised I thought it wouldn't be a problem.

 In the port, I tried to run `python -m wheel install archive.whl` but I
 didn't succeed in doing it either in the `build` or in the `destroot`
 phases. Given the kind of error I think I'm forgetting something obvious.
 This is the `port` file:

 {{{
 PortSystem          1.0
 PortGroup           python 1.0

 name                py-tensorflow-tensorboard
 version             0.4.0rc3
 platforms           darwin
 license             Apache-2
 maintainers         @emcrisostomo openmaintainer

 description         TensorFlow helps the tensors flow
 long_description    TensorBoard is a suite of web applications for
 inspecting \
                     and understanding your TensorFlow runs and graphs.

 homepage            https://github.com/tensorflow/tensorboard
 master_sites
 https://pypi.python.org/packages/d5/fb/80df4eb3234c41beeeb3122b1966effbf08608fb80d2fa74bb72f8da9cb3

 if {${python.version} < 30} {
     distname            tensorflow_tensorboard-${version}-py2-none-any
 } else {
     distname            tensorflow_tensorboard-${version}-py3-none-any
 }

 extract.suffix      .whl
 extract.cmd         cp
 extract.pre_args
 extract.post_args   ${worksrcpath}
 extract.mkdir       yes

 checksums           rmd160  52c4d0d3bf8856e2ebc87ae9785319e4416ccdce \
                     sha256
 2b8741aed01f35c95b781d25ebf1a84a45c2980746a616a36ade7ed8078d88ee

 python.versions     27 34 35 36

 if {${name} ne ${subport}} {

     depends_build-append \
         port:py${python.version}-wheel

     # Futures should be only included if python is < 27
     depends_lib-append \
         port:py${python.version}-wheel \
         port:py${python.version}-bleach \
         port:py${python.version}-markdown \
         port:py${python.version}-html5lib \
         port:py${python.version}-werkzeug \
         port:py${python.version}-protobuf3 \
         port:py${python.version}-six \
         port:py${python.version}-numpy

     if {${python.version} eq 27} {
         depends_lib-append \
             port:py${python.version}-futures \
     }

     build {
     }

     destroot.cmd        python${python.branch}
     destroot.pre_args
     destroot.args       -m wheel install
 ${worksrcpath}/${distname}${extract.suffix}
     destroot.post_args

     livecheck.type      none
 }
 }}}

 The error I'm getting is

 {{{
 :debug:destroot system:  cd "/opt/local/var/macports/build
 /_Users_enricomariacrisostomo_ports_python_py-tensorflow-tensorboard/py27
 -tensorflow-tensorboard/work/tensorflow_tensorboard-0.4.0rc3-py2-none-any"
 && python2.7 -m wheel install /opt/local/var/macports/build
 /_Users_enricomariacrisostomo_ports_python_py-tensorflow-tensorboard/py27
 -tensorflow-tensorboard/work/tensorflow_tensorboard-0.4.0rc3-py2-none-
 any/tensorflow_tensorboard-0.4.0rc3-py2-none-any.whl
 :info:destroot Traceback (most recent call last):
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py",
 line 174, in _run_module_as_main
 :info:destroot     "__main__", fname, loader, pkg_name)
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py",
 line 72, in _run_code
 :info:destroot     exec code in run_globals
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/wheel/__main__.py", line 19, in <module>
 :info:destroot     sys.exit(main())
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/wheel/__main__.py", line 15, in main
 :info:destroot     sys.exit(wheel.tool.main())
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/wheel/tool/__init__.py", line 372, in main
 :info:destroot     args.func(args)
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/wheel/tool/__init__.py", line 314, in install_f
 :info:destroot     args.wheel_dirs, args.force, args.list_files)
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/wheel/tool/__init__.py", line 233, in install
 :info:destroot     wf.install(force=force)
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/wheel/install.py", line 346, in install
 :info:destroot     os.makedirs(ddir)
 :info:destroot   File
 "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py",
 line 157, in makedirs
 :info:destroot     mkdir(name, mode)
 :info:destroot OSError: [Errno 1] Operation not permitted:
 '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
 /site-packages/tensorboard'
 }}}

 Besides the main error, I certainly have other things where I'd really
 appreciate some feedback:

   * Using that `master_site` was the only way I got it working. Is there a
 better way? I tried some acrobatics with the `pypi` to no avail.
   * Downloading a binary package and skip extraction and build is already
 asked in another issue: https://github.com/macports/macports-base/pull/49
   * Is using `python${python.branch}` the correct way to refer to the
 currently installed `python` binary? Is there a better idiom to do the
 same things?

 Thanks.

--
Ticket URL: <https://trac.macports.org/ticket/55541>
MacPorts <https://www.macports.org/>
Ports system for macOS


More information about the macports-tickets mailing list