Skip to content

bpo-1294959: Add --with-platlibdir to configure #18381

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Mar 10, 2020
Merged

bpo-1294959: Add --with-platlibdir to configure #18381

merged 1 commit into from
Mar 10, 2020

Conversation

vstinner
Copy link
Member

@vstinner vstinner commented Feb 6, 2020

Add --with-platlibdir option to configure to choose where
platform-specific and standard library files are installed
(default: 'lib'). It is used on Fedora and SuSE to use /usr/lib64
instead of /usr/lib on 64-bit systems.

Add sys.platlibdir attribute.

Co-Authored-By: Jan Matějek [email protected]
Co-Authored-By: Matěj Cepl [email protected]
Co-Authored-By: Charalampos Stratakis [email protected]

https://bugs.python.org/issue1294959

@vstinner vstinner changed the title bpo-1294959: Add --with-python-libdir to configure [WIP] bpo-1294959: Add --with-python-libdir to configure Feb 6, 2020
@vstinner
Copy link
Member Author

vstinner commented Feb 6, 2020

Fedora is maintaining a downstream patch for years in the different python packages: https://src.fedoraproject.org/rpms/python3/blob/master/f/00102-lib64.patch

This PR is not this patch, it's a rewrite based on the Fedora: we made the library name configurable.

This PR doesn't change the default which remains "lib". It only adds an opt-in option for Linux vendors like Fedora and OpenSUSE who already change this directory. I'm not sure about Debian/Ubuntu (I have to check).

Previous attempts to implement https://bugs.python.org/issue1294959:

There is also https://bugs.python.org/issue34032 which should be marked as a duplicate.

@vstinner
Copy link
Member Author

vstinner commented Feb 6, 2020

test_embed is failing. I have to investigate to understand why, so I marked the PR as a WIP.

Note: I excluded the setup.py change of the Fedora change from this PR, it doesn't seem to be directly related to this PR.

@vstinner vstinner requested a review from a team as a code owner February 11, 2020 15:23
@vstinner
Copy link
Member Author

Note: I excluded the setup.py change of the Fedora change from this PR, it doesn't seem to be directly related to this PR.

Hum, once this PR wil lbe merged, I will work on a separated PR for setup.py.

@vstinner
Copy link
Member Author

I compared this PR with PR #3698 written by Jan Matějek for OpenSUSE. They look very similar. The main differences are that:

  • (1) this PR also updates the path for the stdlib. For example, on Fedora, the os module is stored in /usr/lib64/python3.7/os.py (lib64), not in /usr/lib/python3.7/os.py (lib).
  • (2) this PR also updates the paths for the user paths. Example on Fedora:
$ python3
Python 3.7.6 (default, Jan 30 2020, 09:44:41) 
>>> import sysconfig, pprint
>>> pprint.pprint(sysconfig.get_paths('posix_user'))
{'data': '/home/vstinner/.local',
 'include': '/home/vstinner/.local/include/python3.7',
 'platlib': '/home/vstinner/.local/lib64/python3.7/site-packages',  # <=== HERE
 'platstdlib': '/home/vstinner/.local/lib64/python3.7',  # <=== HERE
 'purelib': '/home/vstinner/.local/lib/python3.7/site-packages',
 'scripts': '/home/vstinner/.local/bin',
 'stdlib': '/home/vstinner/.local/lib64/python3.7'}  # <=== HERE

I don't know how it's used. In practice, I only have ~/.local/lib/python3.7/ in my HOME directory and it does contain a few C extensions:

/home/vstinner/.local/lib/python3.7/site-packages/lazy_object_proxy/cext.cpython-37m-x86_64-linux-gnu.so
/home/vstinner/.local/lib/python3.7/site-packages/typed_ast/_ast27.cpython-37m-x86_64-linux-gnu.so
/home/vstinner/.local/lib/python3.7/site-packages/typed_ast/_ast3.cpython-37m-x86_64-linux-gnu.so

All differences:

  • This PR adds sys.python_libdir variable, Matějek's PR uses get_config_var("platsubdir") instead
  • Lib/distutils/command/install.py: this PR also changes unix_home['platlib']
  • Lib/sysconfig.py: this PR also changes posix_user scheme
  • Lib/distutils/sysconfig.py: this PR uses python_libdir if standard_lib is true or plat_specific is true, Matějek's PR only uses platsubdir for plat_specific is true. Side effect: this PR has to update pydoc as well for the stdlib path.
  • test_site.py: this PR checks also dirs[1], Matějek's PR only checks dirs[0]
  • Matějek's PR also changes Lib/test/test_sysconfig.py for test on posix_user
  • Matějek's PR also updates Lib/trace.py if ignore dirs is used: it looks like a bug in this PR
  • Makefile.pre.in: this PR uses variable "PYTHON_LIBDIR", Matějek's PR uses "platsubdir" variable
  • Matějek's PR adds two long Changelog entries :-)
  • Modules/getpath.c: this PR updates also <python_dirlib> / "lib-dynload" path, Matějek's PR only updates "lib/python" path.
  • configure.ac: this PR adds --with-python-libdir=lib, Matějek's PR adds --with-custom-platsubdir=lib

@vstinner
Copy link
Member Author

(1) this PR also updates the path for the stdlib. For example, on Fedora, the os module is stored in /usr/lib64/python3.7/os.py (lib64), not in /usr/lib/python3.7/os.py (lib).

I guess that the intent was to be able to co-install i686 (32-bit) and x86-64 (64-bit) flavors of Python 3 without having conflicts on paths.

For example, python3-libs.i686 installs os.py into /usr/lib/python3.7/os.py, whereas python3-libs.x86_64 installs os.py into /usr/lib64/python3.7/os.py.

On Fedora 31, I can co-install python3.i686 and python3-libs.i686, whereas python3.x86_64 and python3-libs.x86_64 are already installed. But I failed to run the 32-bit version of /usr/bin/python3.7. This file is provided by python3.i686 and python3.x86_64, but it seems like the 64-bit flavor won.

@vstinner vstinner changed the title [WIP] bpo-1294959: Add --with-python-libdir to configure bpo-1294959: Add --with-python-libdir to configure Feb 11, 2020
@vstinner
Copy link
Member Author

@stratakis's PR #11755 is very similar to @matejcik's PR #3698. He even explained it: "This PR is based on #3698 rebased on top of master and the NEWS entries tidied up a bit. I haven't tested it yet as of recently thus the WIP in the title."

@vstinner
Copy link
Member Author

On SUSE, the stdlib is also in /usr/lib64. Example: /usr/lib64/python3.7/os.py

@the-knights-who-say-ni
Copy link

Hello, and thanks for your contribution!

I'm a bot set up to make sure that the project can legally accept this contribution by verifying everyone involved has signed the PSF contributor agreement (CLA).

Recognized GitHub username

We couldn't find a bugs.python.org (b.p.o) account corresponding to the following GitHub usernames:

@RandyMcMillan

This might be simply due to a missing "GitHub Name" entry in one's b.p.o account settings. This is necessary for legal reasons before we can look at this contribution. Please follow the steps outlined in the CPython devguide to rectify this issue.

You can check yourself to see if the CLA has been received.

Thanks again for the contribution, we look forward to reviewing it!

@mcepl
Copy link
Contributor

mcepl commented Mar 4, 2020

Even with (generated, so too long) configure command:

./configure --host=x86_64-suse-linux-gnu \
    --build=x86_64-suse-linux-gnu --program-prefix= \
    --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr \
    --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc \
    --datadir=/usr/share --includedir=/usr/include \
    --libdir=/usr/lib64 --libexecdir=/usr/lib --localstatedir=/var \
    --sharedstatedir=/var/lib --mandir=/usr/share/man \
    --infodir=/usr/share/info --disable-dependency-tracking \
    --docdir=/usr/share/doc/packages/python \
    --with-python-libdir=lib64 --enable-ipv6 --enable-shared \
    --with-ensurepip=no --with-system-ffi --with-system-expat \
    --with-lto --enable-optimizations \
    --enable-loadable-sqlite-extensions

I get /usr/python3.9/config-3.9-x86_64-linux-gnu/ directory for all files there.

Used tarball is Python-3.9.0a3.tar.xz.

When checking the generated Makefile I see the line 1573:

LIBPL=          $(prefix)//python3.9/config-$(VERSION)$(ABIFLAGS)-x86_64-linux-gnu

which seems to me obviously wrong. I would think it should be

LIBPL=          $(LIBDIR)/python3.9/config-$(VERSION)$(ABIFLAGS)-x86_64-linux-gnu

@mcepl
Copy link
Contributor

mcepl commented Mar 5, 2020

@vstinner OK, aside from the above problem with config-* subdir and bpo#39855, Python 3.9.0a3 builds correctly and all tests pass. +1 from me.

@vstinner
Copy link
Member Author

vstinner commented Mar 5, 2020

LIBPL= $(prefix)//python3.9/config-$(VERSION)$(ABIFLAGS)-x86_64-linux-gnu

Oops. That's a stupid typo, it's now fixed. Well spotted, thanks!

@mcepl
Copy link
Contributor

mcepl commented Mar 5, 2020

Output of lib64_tests.py reports one failure:

[  507s] ======================================================================
[  507s] FAIL: test_sys (__main__.Lib64Tests)
[  507s] ----------------------------------------------------------------------
[  507s] Traceback (most recent call last):
[  507s]   File "/home/abuild/rpmbuild/SOURCES/lib64_tests.py", line 47, in test_sys
[  507s]     self.assertEqual(paths[0], f'/usr/lib64/python3{MINOR}.zip')
[  507s] AssertionError: '/home/abuild/rpmbuild/SOURCES' != '/usr/lib64/python39.zip'
[  507s] - /home/abuild/rpmbuild/SOURCES
[  507s] + /usr/lib64/python39.zip
[  507s]

@vstinner
Copy link
Member Author

vstinner commented Mar 5, 2020

Ok ok, we reached the point where the most important question became... the option name :-D There are several choices:

  • ./configure --libdir-name=lib64 and sys.libdir_name: @merwok likes it, me too!
  • ./configure --libsubdir=lib64 and sys.libsubdir
  • ./configure --python-libdir=lib64 and sys.python_libdir: let me be plain honest, I don't like my own proposal (current choice of this PR)...
  • ./configure --with-custom-platsubdir: SuSE downstream patches
  • ./configure --with-custom-platlibdir: proposed in https://bugs.python.org/issue34032 (variant of the SuSE patch)

@brettcannon @encukou @stratakis @]mcepl: What's your call on this very important question? :-D

Not considered:

  • sys.implementation._lib or sys.implementation.platlibdir: Matthias Klose disagreed with using sys.implementation; https://bugs.python.org/issue1294959#msg202366
  • ./configure --libdir=lib64 and sys.libdir: I don't think that anyone considered this option seriously, --libdir is a standard configure/autotools option which has a different meaning.

About the need for adding a new sys attribute. SuSE doesn't add a sys attribute, instead it imports sysconfig in site which has a negative impact on Python startup performance. I chose to add an attribute to sys to avoid that.

@vstinner
Copy link
Member Author

vstinner commented Mar 5, 2020

@mcepl: "Output of lib64_tests.py reports one failure: (...) AssertionError: '/home/abuild/rpmbuild/SOURCES' != '/usr/lib64/python39.zip'"

Well, it's really hard to test sys.path. You can ignore this error. It seems like something injected SOURCES in sys.path which wasn't expected by the test. At least, other tests passed which is great!

@encukou
Copy link
Member

encukou commented Mar 5, 2020

Since you explicitly asked for bikeshedding:

  • libdir_name looks like "the name of libdir"
  • libsubdir looks like "a subdirectory of libdir"
  • python-libdir looks like "libdir, but specific to Python"
  • platsubdir looks like "a subdirectory of platdir"
  • platlibdir looks like "a platform-specific variant of libdir"

I'd go for platlibdir. But I have no strong preference.

@stratakis
Copy link
Contributor

I concur with Petr. I really like the --with-custom-platlibdir and as a second choice I would go for --libdir-name

@brettcannon
Copy link
Member

👍 to Petr's suggestion

@vstinner
Copy link
Member Author

vstinner commented Mar 9, 2020

I updated the PR to use ./configure --with-platlibdir and sys.platlibdir names.

I completed the list of authors::

    Co-Authored-By: Jan Matějek <[email protected]>
    Co-Authored-By: Matěj Cepl <[email protected]>
    Co-Authored-By: Charalampos Stratakis <[email protected]>

https://bugs.python.org/issue1294959 has a long history, and these 3 developers wrote earlier patche and pull requests. We all collaborated somehow.

@stratakis: "I concur with Petr. I really like the --with-custom-platlibdir (...)"

I dislike the custom- prefix. There is no other configure option which such prefix.

@stratakis
Copy link
Contributor

From my perspective the PR looks good to me.

@vstinner
Copy link
Member Author

vstinner commented Mar 9, 2020

I updated the PR to use ./configure --with-platlibdir and sys.platlibdir names.

Changes:

  • PR rebased on master
  • Commits squashed to rewrite the commit message
  • sys.platlibdir documentation completed to give more concrete examples of paths
  • Fix a memory leak in sysmodule.c if PyDict_SetItem() fails: use SET_SYS_FROM_STRING, rather than SET_SYS_FROM_STRING_BORROW
  • site: I also factorized duplicated code for the os.sep != "/" (Windows) code path

@vstinner vstinner changed the title bpo-1294959: Add --with-python-libdir to configure bpo-1294959: Add --with-platlibdir to configure Mar 9, 2020
@mcepl
Copy link
Contributor

mcepl commented Mar 9, 2020

I updated the PR to use ./configure --with-platlibdir and sys.platlibdir names.

+1 from me. It builds without any problem.

Add --with-platlibdir option to the configure script: name of the
platform-specific library directory, stored in the new sys.platlitdir
attribute. It is used to build the path of platform-specific dynamic
libraries and the path of the standard library.

It is equal to "lib" on most platforms. On Fedora and SuSE, it is
equal to "lib64" on 64-bit systems.

Co-Authored-By: Jan Matějek <[email protected]>
Co-Authored-By: Matěj Cepl <[email protected]>
Co-Authored-By: Charalampos Stratakis <[email protected]>
@vstinner
Copy link
Member Author

I updated the PR to complete/adjust the documentation.

It works as expected. I tested my PR with:

git clean -fdx
./configure --prefix /usr --with-platlibdir=lib64 CFLAGS="-O0"
make
curl -O https://bugs.python.org/file48966/lib64_tests-3.py
./python lib64_tests-3.py 

Output:

.....
WARNING: Python is run from its source directory!
PR 18381 (sys.platlibdir)? True

----------------------------------------------------------------------
Ran 5 tests in 0.032s

OK

@vstinner
Copy link
Member Author

I created https://src.fedoraproject.org/rpms/python39/pull-request/31 to test this PR on the python39 RPM package for Fedora 31 (Stable).

@vstinner
Copy link
Member Author

I created https://src.fedoraproject.org/rpms/python39/pull-request/31 to test this PR on the python39 RPM package for Fedora 31 (Stable).

The scratch build (temporary package for testing) completed successfully on x86-64: the patch applies and built Python uses /usr/lib64 as expected.

I tested manually lib64_tests-3.py of https://bugs.python.org/issue1294959: paths are unchanged with this PR. It means that #18381 works as expected.

@vstinner vstinner dismissed brettcannon’s stale review March 10, 2020 08:52

I addressed Brett's review ("Probably need to expand the docs a bit as well as a suggestion on how to simplify some code.")

@vstinner vstinner merged commit 8510f43 into python:master Mar 10, 2020
@vstinner vstinner deleted the python_libdir branch March 10, 2020 08:53
@bedevere-bot
Copy link

⚠️⚠️⚠️ Buildbot failure ⚠️⚠️⚠️

Hi! The buildbot s390x RHEL7 LTO 3.x has failed when building commit 8510f43.

What do you need to do:

  1. Don't panic.
  2. Check the buildbot page in the devguide if you don't know what the buildbots are or how they work.
  3. Go to the page of the buildbot that failed (https://buildbot.python.org/all/#builders/527/builds/97) and take a look at the build logs.
  4. Check if the failure is related to this commit (8510f43) or if it is a false positive.
  5. If the failure is related to this commit, please, reflect that on the issue and make a new Pull Request with a fix.

You can take a look at the buildbot page here:

https://buildbot.python.org/all/#builders/527/builds/97

Failed tests:

  • test_urllib2net

Failed subtests:

  • test_ftp_timeout - test.test_urllib2net.TimeoutTest
  • test_ftp_default_timeout - test.test_urllib2net.TimeoutTest
  • test_ftp_basic - test.test_urllib2net.TimeoutTest
  • test_ftp - test.test_urllib2net.OtherNetworkTests
  • test_ftp_no_timeout - test.test_urllib2net.TimeoutTest

Summary of the results of the build (if available):

== Tests result: FAILURE then FAILURE ==

406 tests OK.

10 slowest tests:

  • test_multiprocessing_spawn: 2 min 41 sec
  • test_concurrent_futures: 2 min 38 sec
  • test_tokenize: 1 min 46 sec
  • test_multiprocessing_forkserver: 1 min 23 sec
  • test_multiprocessing_fork: 1 min 12 sec
  • test_unparse: 1 min 5 sec
  • test_lib2to3: 1 min 4 sec
  • test_asyncio: 52.3 sec
  • test_signal: 48.1 sec
  • test_io: 42.2 sec

1 test failed:
test_urllib2net

13 tests skipped:
test_devpoll test_ioctl test_kqueue test_msilib test_ossaudiodev
test_startfile test_tix test_tk test_ttk_guionly test_winconsoleio
test_winreg test_winsound test_zipfile64

1 re-run test:
test_urllib2net

Total duration: 6 min 48 sec

Click to see traceback logs
Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 320, in test_ftp_default_timeout
    u = _urlopen_with_retry(self.FTP_HOST)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 25, in wrapped
    return _retry_thrice(func, exc, *args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 21, in _retry_thrice
    raise last_exc
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 17, in _retry_thrice
    return func(*args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 517, in open
    response = self._open(req, data)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 534, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1546, in ftp_open
    raise exc.with_traceback(sys.exc_info()[2])
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2420, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
urllib.error.URLError: <urlopen error ftp error: error_perm('500 OOPS: vsf_sysutil_bind')>


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 310, in test_ftp_basic
    u = _urlopen_with_retry(self.FTP_HOST)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 25, in wrapped
    return _retry_thrice(func, exc, *args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 21, in _retry_thrice
    raise last_exc
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 17, in _retry_thrice
    return func(*args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 517, in open
    response = self._open(req, data)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 534, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1546, in ftp_open
    raise exc.with_traceback(sys.exc_info()[2])
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2420, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
urllib.error.URLError: <urlopen error ftp error: error_perm('500 OOPS: vsf_sysutil_bind')>


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 332, in test_ftp_no_timeout
    u = _urlopen_with_retry(self.FTP_HOST, timeout=None)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 25, in wrapped
    return _retry_thrice(func, exc, *args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 21, in _retry_thrice
    raise last_exc
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 17, in _retry_thrice
    return func(*args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 517, in open
    response = self._open(req, data)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 534, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1546, in ftp_open
    raise exc.with_traceback(sys.exc_info()[2])
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2420, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
urllib.error.URLError: <urlopen error ftp error: error_perm('500 OOPS: vsf_sysutil_bind')>


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2402, in retrfile
    raise URLError('ftp error: %r' % reason).with_traceback(
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2399, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
urllib.error.URLError: <urlopen error ftp error: error_perm('500 OOPS: vsf_sysutil_bind')>


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2420, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
ftplib.error_perm: 500 OOPS: vsf_sysutil_bind


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 228, in _test_urls
    f = urlopen(url, req, support.INTERNET_TIMEOUT)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 25, in wrapped
    return _retry_thrice(func, exc, *args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 21, in _retry_thrice
    raise last_exc
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 17, in _retry_thrice
    return func(*args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 517, in open
    response = self._open(req, data)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 534, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1546, in ftp_open
    raise exc.with_traceback(sys.exc_info()[2])
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2402, in retrfile
    raise URLError('ftp error: %r' % reason).with_traceback(
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2399, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
urllib.error.URLError: <urlopen error ftp error: URLError("ftp error: error_perm('500 OOPS: vsf_sysutil_bind')")>


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 341, in test_ftp_timeout
    u = _urlopen_with_retry(self.FTP_HOST, timeout=60)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 25, in wrapped
    return _retry_thrice(func, exc, *args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 21, in _retry_thrice
    raise last_exc
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/test/test_urllib2net.py", line 17, in _retry_thrice
    return func(*args, **kwargs)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 214, in urlopen
    return opener.open(url, data, timeout)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 517, in open
    response = self._open(req, data)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 534, in _open
    result = self._call_chain(self.handle_open, protocol, protocol +
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 494, in _call_chain
    result = func(*args)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1546, in ftp_open
    raise exc.with_traceback(sys.exc_info()[2])
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 1535, in ftp_open
    fp, retrlen = fw.retrfile(file, type)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2420, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
urllib.error.URLError: <urlopen error ftp error: error_perm('500 OOPS: vsf_sysutil_bind')>


Traceback (most recent call last):
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/urllib/request.py", line 2399, in retrfile
    conn, retrlen = self.ftp.ntransfercmd(cmd)
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 344, in ntransfercmd
    host, port = self.makepasv()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 322, in makepasv
    host, port = parse227(self.sendcmd('PASV'))
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 277, in sendcmd
    return self.getresp()
  File "/home/dje/cpython-buildarea/3.x.edelsohn-rhel-z.lto/build/Lib/ftplib.py", line 250, in getresp
    raise error_perm(resp)
ftplib.error_perm: 500 OOPS: vsf_sysutil_bind

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

8 participants