2017-01-28 53 views
18

Powiedzmy mam bardzo prosty pakiet o następującej strukturze:Opakowania pliki pośredniczące

. 
├── foo 
│   ├── bar 
│   │   └── __init__.py 
│   └── __init__.py 
└── setup.py 

zawartość plików:

  • setup.py:

    from distutils.core import setup 
    
    setup(
        name='foobar', 
        version='', 
        packages=['foo', 'foo.bar'], 
        url='', 
        license='Apache License 2.0', 
        author='foobar', 
        author_email='', 
        description='' 
    ) 
    
  • foo/bar/__init__.py:

    def foobar(x): 
        return x 
    
  • Pozostałe pliki są puste.

zainstalować pakiet za pomocą pip:

cd foobar 
pip install . 

i może potwierdzić, że jest prawidłowo zainstalowana.

Teraz chcę utworzyć oddzielny pakiet z plikami króćcami:

. 
├── foo 
│   ├── bar 
│   │   └── __init__.pyi 
│   └── __init__.pyi 
└── setup.py 

Zawartość plików:

  • setup.py:

    from distutils.core import setup 
    import sys 
    import pathlib 
    
    setup(
        name='foobar_annot', 
        version='', 
        packages=['foo', 'foo.bar'], 
        url='', 
        license='Apache License 2.0', 
        author='foobar', 
        author_email='', 
        description='', 
        data_files=[ 
         (
          'shared/typehints/python{}.{}/foo/bar'.format(*sys.version_info[:2]), 
          ["foo/bar/__init__.pyi"] 
         ), 
        ], 
    ) 
    
  • foo.bar.__init__.pyi:

    def foobar(x: int) -> int: ... 
    

mogę zainstalować ten pakiet, widać, że tworzy anaconda3/shared/typehints/python3.5/foo/bar/__init__.pyi w moim Anaconda korzenia, ale nie wygląda na to jest rozpoznawane przez pycharm (mam żadnych ostrzeżeń). Kiedy umieszczam plik pyi w pakiecie głównym, wszystko działa poprawnie.

Byłbym wdzięczny za wszelkie wskazówki, jak do tej pracy:

Niektóre rzeczy, które pracują, ale nie rozwiąże problemu:

  • wysyłanie plików pośredniczące w bieżącym projekcie i oznakowanie jako źródeł.
  • Dodawanie katalogu głównego pakietu do ścieżki tłumacza (przynajmniej w niektórych prostych przypadkach).

więc pytania: Jak stworzyć minimalne, podziałowi pakiet z króćców Python, które zostaną uznane przez istniejących narzędzi. Na podstawie doświadczeń podejrzewam jeden z dwóch problemów:

  • ja źle strukturę, która powinna być utworzony przez pakiet w shared/typehints/pythonX.Y - jeśli to prawda, to w jaki sposób należy określić data_files?
  • PyCharm w ogóle nie bierze pod uwagę tych plików (wydaje się, że niektóre komentarze w połączonym wydaniu są sprzeczne).
  • Wygląda na to, że działa dobrze, ale popełniłem błąd w konfiguracji i szukałem problemu zewnętrznego, który nie istnieje.
  • Czy istnieją jakieś ustalone procedury rozwiązywania takich problemów?
+0

Która wersja pycharm i Który OS? – fedepad

Odpowiedz

2

Problem polega na tym, że w swoim odcinku pośrednim nie uwzględniono pliku foo/__init__.pyi. Mimo że jest pusty, powoduje, że foo jest pakietem plików pośredniczących i umożliwia wyszukiwanie foo.bar.

Można zmodyfikować data_files w setup.py obejmuje zarówno

data_files=[ 
    (
     'shared/typehints/python{}.{}/foo/bar'.format(*sys.version_info[:2]), 
     ["foo/bar/__init__.pyi"] 
    ), 

    (
     'shared/typehints/python{}.{}/foo'.format(*sys.version_info[:2]), 
     ["foo/__init__.pyi"] 
    ), 
],