On 2018 Apr 25, at 16:02, Skip Montanaro <skip.montanaro@gmail.com> wrote:
I recently ported a package to Python 3. The overall structure is pretty straightforward:
top/ client/ module.py server/ server.py
There's more to it, but that's enough for demonstration. I am retaining Python 2.7 compatibility on the client side, but have dispensed with that business on the server. (I run the server, not my users.) Accordingly, I would like the py27 version of the package to not have a subpackage named "server".
I thought it would be easy peasy to just trim the server bits from setuptools.find_packages() in my setup.py file (I have 36.5.0.post20170921 of setuptools), something like this:
packages = setuptools.find_packages() if sys.version_info.major < 3: packages.remove("top.server")
In either case, I pass the resulting list as the packages argument of setuptools.setup(...).
That doesn't work though. I get some sort of mish-mash where part of the top/server tree is copied, part not. I eventually get an error from a cp command, something about ".../server is not a directory".
If by "top/server tree" you mean that there are more subpackages under top.server (not just a server.py file as your diagram shows), then you need to filter out all of those subpackages as well, e.g.: packages = setuptools.find_packages() if sys.version_info.major < 3: packages = [ pkg for pkg in packages if pkg != "top.server" and not pkg.startswith("top.server.") ]