Credentials in pip.conf for private PyPI

前端 未结 4 1809
感动是毒
感动是毒 2020-12-24 02:17

I have a private PyPI repository. Is there any way to store credentials in pip.conf similar to .pypirc?

What I mean. Currently in .py

相关标签:
4条回答
  • 2020-12-24 02:33

    Please request this feature on https://github.com/pypa/pip/issues/4789

    The right answer should be PIP_USERNAME, PIP_PASSWORD as in twine

    0 讨论(0)
  • 2020-12-24 02:35

    You could store credentials for Pip to use in ~/.netrc like this:

    machine pypi.example.com
        login johndoe
        password changeme
    

    Pip will use these credentials when accessing https://pypi.example.com but won't log them. You must specify the index server separately (such as in pip.conf as in the question).

    Note that ~/.netrc must be owned by the user pip executes as. It must not be readable by any other user, either. An invalid file is silently ignored. You can ensure the permissions are correct like this:

    chown $USER ~/.netrc
    chmod 0600 ~/.netrc
    

    This permissions check doesn't apply before Python 3.4, but it's a good idea in any case.

    Internally Pip uses requests when making HTTP requests. requests uses the standard library netrc module to read the file, so the character set is limited to an ASCII subset.

    0 讨论(0)
  • 2020-12-24 02:37

    Given issue 4789 is still open, you can utilize the following approach in your requirements.txt:

    --extra-index-url=https://${PYPI_USERNAME}:${PYPI_PASSWORD}@my.privatepypi.com
    private-package==1.2.3
    ...
    

    If you try to run pip install requirements.txt with those environment variables set, you will find that pip still asks for credentials. This is because pip does not interpolate the expression ${PYPI_USERNAME} as one would expect, but rather url encodes it. Your username and password in this example is expressed as https://%24%7BPYPI_USERNAME%7D:%24%7BPYPI_PASSWORD%7D@my.privatepypi.com

    The work around here, and I admit there should be a better approach, but we can run pip as a script:

    python3 -m pip install -r requirements.txt
    

    From man:

     -m module-name
        Searches sys.path for the named module and runs the corresponding .py file as a script.
    
    0 讨论(0)
  • 2020-12-24 02:39

    How about storing the Username/Password as environment variables,

    export username=username
    export password=password
    

    and referring to them in the pip.conf like so:

    [global]
    index = https://$username:$password@pypi.example.com/pypi
    index-url = https://$username:$password@pypi.example.com/simple
    cert = /etc/ssl/certs/ca-certificates.crt
    

    I use Gitlab CI's secret variables for storing credentials. Check for an equivalent in your CI tool.

    0 讨论(0)
提交回复
热议问题