requirements.txt 자동 생성


277

때로는 파이썬 소스 코드를 다운로드하여 github모든 종속성을 설치하는 방법을 모릅니다. requirements.txt파일 이 없으면 직접 작성해야합니다. 파이썬 소스 코드 디렉토리가 주어지면 requirements.txt가져 오기 섹션에서 자동으로 만들 수 있습니까?


2
실행 pip freeze > requirements.txt하면 현재 버전의 모든 파이썬 라이브러리가 requirements.txt파일 로 저장됩니다
Shaikhul

7
@Shaikhul 그러나 GitHub에서 패키지를 다운로드하기 만하면 종속성이 설치되지 않은 경우에는 도움이되지 않습니다.
jonrsharpe

8
참고 : a) 현재 프로젝트에서 사용 여부에 관계없이 해당 시스템에 설치된 모듈 pip freeze의 현재 버전을 덤프 all합니다. b) pip는 pip를 통해 설치된 모듈 만 나열합니다
akskap

답변:


290

가상 환경을 사용한다면 pip freeze > requirements.txt괜찮습니다. 그렇지 않을 경우 , pigar는 당신을 위해 좋은 선택이 될 것입니다.

그건 그렇고, 나는 그것이 2.6에서 작동하는지 보장하지 않습니다.

업데이트 :

개발 흐름을 개선 하려면 Pipenv 또는 기타 도구가 권장됩니다.

들어 파이썬 3 아래 사용

pip3 freeze > requirements.txt

3
오류가있는 사람 pip3 freeze > requirements.txt은 질문하기 전에 시도해 보는 것이 좋습니다 .
baranskistad

3
나는 실행 pip3 freeze > requirements.txt하고 나는 내가 실제로 등을 사용하고 일부 패키지를 찾을 수에 놀랐 argparse하고 configparser. 파이썬 코어의 일부이기 때문입니까? 더 나은 대답은 pipreqs프로젝트에서 사용하는 요구 사항 만 나열하기 때문에 아래 에서 사용 하는 것입니다.
Alexis.Rolland

@ Alexis.Rolland 예, argparse그리고 configparserPython3 표준 라이브러리에 속해, 그래서, 무슨 잘못 pip3 freeze? 나는 당신의 요점을 얻지 못합니다.
damnever

11
@damnever Ok 감사합니다! pip3 freeze내 환경에 설치된 모든 Python 패키지 목록을 pipreqs제공 하는 반면 필자가 찾고있는 소스 코드에서 실제로 사용 된 모든 패키지를 제공합니다. 그 외에는 아무 문제가 없습니다.
Alexis.Rolland

1
pipenv에 심각한 문제가 있습니다. 다음 토론을보십시오 : news.ycombinator.com/item?id=18612590
Justin M. Keyes

364

다음 코드를 사용하여 requirements.txt 파일을 생성 할 수 있습니다.

pip install pipreqs

pipreqs /path/to/project

pipreq와 관련된 자세한 정보는 여기를 참조하십시오 .

때때로을 만나지 pip freeze만 현재 프로젝트에서 사용하지 않는 패키지를 포함하여 환경의 모든 패키지를 저장합니다.


1
@ IgorBarinov는 경고이며 실행하는 데 문제가 발생하지 않습니다 pipreqs. 파이썬 2.6에 설치하고 동일한 경고가 표시되었지만 requirements.txt@DJanssens
Shaikhul에게

1
@Shaikhul이 경고가 표시되면 전체 파일이 없으며 요구 사항의 일부만 얻게됩니다. github.com/npow/MemNN/tree/hyperopt repo 에서 확인할 수 있습니다 . 나는에만 'hyperopt == 0.0.2 NumPy와 == 1.9.2 scikit_learn == 0.16.1 theano == 0.7.0'
이고르 Barinov

1
그것은 말했다 it is strongly recommended to upgrade to a newer Python version
Shaikhul

2
훌륭한 도구입니다. 감사! 그것의 강력한 기능은 핍 동결과 같은 것이 아니라 사용 된 패키지를 정확하게 생성합니다!
Wesam Na

1
새 print 문 출력 형식이 uesd 인 경우 Python 3.6에서는 작동하지 않습니다.
Anand CU

12

필자의 경우 Anaconda를 사용하므로 환경 내 conda 터미널에서 다음 명령을 실행하면 문제가 해결되고 자동 으로이 요구 사항 txt 파일이 만들어졌습니다.

conda list -e > requirements.txt

이 Github 링크 pratos / condaenv.txt에서 가져 왔습니다.

오류가 발생하고 아나콘다를 사용하는 경우 .yml 옵션을 사용하십시오.

conda env export > <environment-name>.yml

다른 사람이 환경을 사용하려면 ... 또는 다른 컴퓨터에서 새 환경을 만드는 경우 : conda env create -f .yml

.yml 옵션은 여기에서 찾을 수 있습니다


가상 환경을 사용하지 않으면 지나치게 긴 requirements.txt 파일이 생성됩니다
SBFRF

1
이것이 실제로 작동합니까? 내가 이것을 시도 할 때마다 pip install requirements.txt거부 하는 종속성 및 구문 세부 사항 이 있습니다.
conner.xyz

.txt를 사용하여 오류가 발견되었으므로 나와 함께 작동했던 다른 옵션을 추가했습니다. 위에서 언급 한 ".yml 사용"
HassanSh__3571619

5

python3.7에 대해 pip3을 실행하십시오.

pip3 freeze >> yourfile.txt

위 명령을 실행하기 전에 가상 환경을 작성했는지 확인하십시오.

python3 :

pip3 install virtualenv
python3 -m venv <myenvname> 

python2 :

pip install virtualenv
virtualenv <myenvname>

그런 다음 소스 코드를 디렉토리에 넣으십시오. 파이썬 파일을 지금 실행하면 네이티브가 아닌 모듈을 사용하는 경우 시작되지 않을 것입니다. 당신은 그 모듈 실행을 설치할 수 있습니다

pip3 install <module> or pip install <module> 

이것은 현재 환경을 제외하고 전체 모듈 목록에 영향을 미치지 않습니다.

이제 맨 위에서 명령을 실행할 수 있으며 이제 가상 환경에 설치 한 모듈 만 포함하는 요구 사항 파일이 있습니다. 이제 맨 위에서 명령을 실행할 수 있습니다.

모든 사람들이 환경을 사용하는 것이 좋습니다.

이것이 도움이 되었기를 바랍니다.


1

광산 즉, 같은 문제에 직면하면 가상 환경에 있지 및 requirements.txt 원한다 특정 프로젝트 또는에서 선택한 폴더 (어린이 포함) 및 pipreqs는 지원되지 않습니다.

당신이 사용할 수있는 :

import os
import sys
from fuzzywuzzy import fuzz
import subprocess

path = "C:/Users/Username/Desktop/DjangoProjects/restAPItest"


files = os.listdir(path)
pyfiles = []
for root, dirs, files in os.walk(path):
      for file in files:
        if file.endswith('.py'):
              pyfiles.append(os.path.join(root, file))

stopWords = ['from', 'import',',','.']

importables = []

for file in pyfiles:
    with open(file) as f:
        content = f.readlines()

        for line in content:
            if "import" in line:
                for sw in stopWords:
                    line = ' '.join(line.split(sw))

                importables.append(line.strip().split(' ')[0])

importables = set(importables)

subprocess.call(f"pip freeze > {path}/requirements.txt", shell=True)

with open(path+'/requirements.txt') as req:
    modules = req.readlines()
    modules = {m.split('=')[0].lower() : m for m in modules}


notList = [''.join(i.split('_')) for i in sys.builtin_module_names]+['os']

new_requirements = []
for req_module in importables:
    try :
        new_requirements.append(modules[req_module])

    except KeyError:
        for k,v in modules.items():
            if len(req_module)>1 and req_module not in notList:
                if fuzz.partial_ratio(req_module,k) > 90:
                    new_requirements.append(modules[k])

new_requirements = [i for i in set(new_requirements)]

new_requirements

with open(path+'/requirements.txt','w') as req:
    req.write(''.join(new_requirements))

추신 : 퍼지 로직을 검사 할 때 몇 가지 추가 라이브러리가있을 수 있습니다.


1

Python 3의 가장 좋은 방법은 다음과 같습니다.

pip3 freeze > requirements.txt

그것은 나를 위해 일했다 ...


0

PyCharm을 사용하는 경우 PyCharm에서 프로젝트를 열거 나 복제 할 때 경고가 표시되고 필요한 모든 패키지를 설치하도록 요청합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.