簡體   English   中英

`pip install -t`不適用於命名空間包

[英]`pip install -t` doesn't work with namespace packages

當我使用pip install -t some_dir安裝一個包時,我通常可以在運行python時導入包,將some_dir添加到我的PYTHONPATH中。 像這樣:

~/dev/scratch [venv] » pip install -t some_dir pytest
...
Successfully installed py pytest
~/dev/scratch [venv]  » PYTHONPATH=some_dir python
...
>>> import pytest
>>>

但是,我最近將庫“stompest”添加到我的依賴項中,這顯然是一個“命名空間包”(並不完全確定這意味着什么)。 它似乎不適用於相同的模式:

~/dev/scratch [venv]  » pip install -t some_dir stompest
...
Successfully installed stompest
~/dev/scratch [venv]  » PYTHONPATH=some_dir python
...
>>> import stompest.config
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named stompest.config

如果我只是正常安裝stompest(比如虛擬環境),它工作正常:

~/dev/scratch [venv]  » pip install stompest
...
Successfully installed stompest-2.1.6
~/dev/scratch [venv]  » python
...
>>> import stompest.config
>>>

問題似乎是pip(?)列出了一個預期在site-dir中的.pth文件(請注意f_locals['sitedir'] ):

~/dev/scratch [venv]  » cat some_dir/stompest-2.1.6-py2.7-nspkg.pth
import sys,types,os; p = os.path.join(sys._getframe(1).f_locals['sitedir'], *('stompest',)); ie = os.path.exists(os.path.join(p,'__init__.py')); m = not ie and sys.modules.setdefault('stompest',types.ModuleType('stompest')); mp = (m or []) and m.__dict__.setdefault('__path__',[]); (p not in mp) and mp.append(p)

我也試過設置PYTHONUSERBASE=some_dir ,但這似乎沒有任何區別。 這似乎是一個類似的問題,到這一個 ,這表明使用--egg作為一種解決方法。 我不能讓--egg-t一起使用,因為我得到一個錯誤,我“試圖將軟件包安裝到不在PYTHONPATH上的目錄,哪個Python不讀取”.pth“文件“。 問題是我無法將目錄添加到PYTHONPATH,因為它似乎試圖安裝到臨時目錄:

~/dev/scratch [venv]  » PYTHONPATH=some_dir pip install -t some_dir --egg stompest
Collecting stompest
  Using cached stompest-2.1.6.tar.gz
Installing collected packages: stompest
  Running setup.py install for stompest
    Complete output from command /home/nalderso/dev/scratch/venv/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-Wc3oaO/stompest/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-fZlXM2-record/install-record.txt --compile --install-headers /home/nalderso/dev/scratch/venv/include/site/python2.7/stompest --home=/tmp/tmpHNVOP0:
    running install
    Checking .pth file support in /tmp/tmpHNVOP0/lib/python/
    /home/nalderso/dev/scratch/venv/bin/python -E -c pass
    TEST FAILED: /tmp/tmpHNVOP0/lib/python/ does NOT support .pth files
    error: bad install directory or PYTHONPATH

    You are attempting to install a package to a directory that is not
    on PYTHONPATH and which Python does not read ".pth" files from.  The
    installation directory you specified (via --install-dir, --prefix, or
    the distutils default setting) was:

        /tmp/tmpHNVOP0/lib/python/

    and your PYTHONPATH environment variable currently contains:

        'some_dir'

    Here are some of your options for correcting the problem:

    * You can choose a different installation directory, i.e., one that is
      on PYTHONPATH or supports .pth files

    * You can add the installation directory to the PYTHONPATH environment
      variable.  (It must then also be on PYTHONPATH whenever you run
      Python and want to use the package(s) you are installing.)

    * You can set up the installation directory to support ".pth" files by
      using one of the approaches described here:

      https://pythonhosted.org/setuptools/easy_install.html#custom-installation-locations

    Please make the appropriate changes for your system and try again.

    ----------------------------------------
Command "/home/nalderso/dev/scratch/venv/bin/python -c "import setuptools, tokenize;__file__='/tmp/pip-build-Wc3oaO/stompest/setup.py';exec(compile(getattr(tokenize, 'open', open)(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --record /tmp/pip-fZlXM2-record/install-record.txt --compile --install-headers /home/nalderso/dev/scratch/venv/include/site/python2.7/stompest --home=/tmp/tmpHNVOP0" failed with error code 1 in /tmp/pip-build-Wc3oaO/stompest

我做錯了什么,或者這是pip的問題?

它適用於您執行此操作:

import site
site.addsitedir('some_dir')

請參閱https://docs.python.org/2/library/site.html#site.addsitedir

在這個pip問題中,我在Matt Iversen(Ivoz)的帖子中找到了這個答案。 請注意,此問題中的討論將繼續討論您可能遇到的一些極端情況。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM