For this year’s Python Developer Survey, we have decided to include packaging specific questions to gauge use cases and help understand user persona. We would like to invite packaging maintainers and users to review the current list of questions and share their feedback. Please let us know if you would like us to include any new question or improve answer choices. Thanks for your help.
Please share your feedback by Friday, Sept. 24, 2021.
The questions have been edited to include all the feedback. The revised questions are listed below-
Which of the following tools do you use to isolate Python environments between projects? (Rank)
a. virtualenv
b. venv
c. virtualenvwrapper
d. hatch
e. poetry
f. pipenv
g. I do not use any tool to isolate Python environments
Do you use a virtual environment (eg: virtualenv) in containers (eg: Docker)? (Single choice)
a. Yes, I use virtual environment in containers
b. No, I do not use virtual environment in containers
c. No, I do not use containers
Do you use the standard library (Python 3.3+) module venv? (Select all that apply)
a. I use venv directly
b. Via poetry
c. Via pipenv
d. Via virtualenv
e. Via tox
f. I don’t know
g. No, I do not use venv
h. Other-specify
Which tools related to Python packaging do you use directly? (Select all that apply)
a. pip
b. conda
c. pipenv
d. poetry
e. venv (standard library)
f. virtualenv
g. flit
h. tox
i. PDM
j. twine
k. Containers (eg: via Docker)
l. Virtual Machines
m. Workplace specific proprietary solution
n. Other-specify
Do you use a tool(s) to manage precise/exact versions (version pinning) of application dependencies? (Single choice)
a. Yes
b. No
If yes, what format(s) are your application dependency information stored in? (Rank)
a. requirements.txt
b. pyproject.toml
c. pipfile.lock
d. poetry.lock
e. conda environment.yml
f. pip constraints.txt
g. Other-specify
If yes, which of the following tools do you use for application dependency management? (Rank)
a. pipenv
b. poetry
c. pip-tools
d. Other- specify
Do you use any of the following automated services to update the versions of application dependencies? (Single choice)
a. dependabot
b. pyup
c. No, application dependency is updated manually
d. Other-specify
Which of the following tools do you use for installing packages? (Rank)
a. pip
b. easy_install
c. conda
d. poetry
e. pip-sync
f. pipx
g. Other- specify
Where do you install packages from? (Rank)
a. PyPI
b. Local source
c. Internal mirror of PyPI
d. Private Python Package Index
e. Anaconda
f. default conda channel
g. conda-forge conda channel
h. Other conda channel
i. GitHub
j. Artifactory
k. GitLab
l. From Linux distribution
m. Other-specify
Do you develop applications? (Single choice)
a. Yes
b. No
If yes, which tool(s) do you use to develop Python applications? (Rank)
a. setuptools
b. build
c. wheel
d. enscons
e. pex
f. flit
g. poetry
h. conda-build
i. maturin
j. pdm-pep517
k. Other- specify
Have you packaged and published a Python application that you developed to a package repository? (Single choice)
a. Yes
b. No
If yes, where have you published your Python application packages? (Rank)
a. PyPI
b. Private Python Package Index
c. Internal mirror of PyPI
d. conda-forge
e. Other-specify
Do you develop and package Python libraries? (Single choice)
a. Yes
b. No
If yes, which tool(s) do you use to create packages of your Python libraries? (Rank)
a. setuptools
b. build
c. wheel
d. enscons
e. pex
f. flit
g. poetry
h. conda-build
i. maturin
j. pdm-pep517
k. Other- specify
Have you packaged and published a Python library to a package repository? (Single choice)
a. Yes
b. No
If yes, where have you published your packaged Python libraries? (Rank)
a. PyPI
b. Private Python Package Index
c. Internal mirror of PyPI
d. conda-forge
e. Other-specify
#2 is missing pip constraints files (the -c option to pip install),
which are separate from requirements files (the -r option), but can
be used together. For example, many of the projects I work on list
dependency names in a requirements.txt file but then pin their
versions with a separate cross-project constraints.txt file to
ensure coinstallability of transitive dependency sets between
different projects within the same ecosystem.
#4 assumes the respondent either uses SaaS dependency management or
no automated dep management at all. It’s also possible that the
project has implemented its own dependency management automation
on which its maintainers rely (many of the projects in which I’m
involved fall into this category, and I doubt we’re the only ones
who have done it).
#12 misses that the virtualenv library can act as a wrapper around
the venv module these days (setting its “creator” to venv, e.g. with
the VIRTUALENV_CREATOR envvar). Also tox is a popular front-end to
creating and interacting with virtual environments via virtualenv
(so ultimately calling the venv module if so configured).
No comments (yet), but wanted to say thank you for doing this openly and collaboratively! Building surveys is hard, especially when it comes to predicting how answers will interact and whether the data will be useful at all in the end. Getting more eyes on it ahead of time is only a good thing
Another useful option to include here might be conda’s environment.yml
Similarly, it might be worth including conda-specific options here. This is a bit harder to pin down, since conda has a notion of “channels”, which are separately-hosted sets of packages, and it wouldn’t make sense to list all of them. Some reasonable options to consider asking about might be:
For inclusiveness, I’d suggest Free/Libre and Open Source for (a). In addition, technically (b) is a superset of (c) and Proprietary might be a less confusing term for non-legal people (given the number of social media posts confusing source-available as open source I’ve seen).
This should be sorted alphabetically to avoid presumed bias.
A bunch of these questions could use a “Other-specify” option: #2, #4, #6, #12, #13. Maybe this thread is about gathering other common answers, but I’m sure people use other things as well…
What about other kinds of containers than Docker?
Note that e.g. RPMbuild (with pyproject macros) is a PEP 517 build frontend. It might be too niche to include as a separate answer, but technically, the difference between Linux distros and conda is quite blurry.