반응형

출처

https://stackoverflow.com/questions/31684375/automatically-create-requirements-txt

자동으로 requirements.txt 생성하기

때때로 저는 github로부터 파이썬 소스 코드를 다운받지만 모든 의존성이 어떻게 설치되는지 모릅니다. 만약 requirements.txt 파일이 없다면 직접 손으로 그것을 만들어야 합니다.
질문
파이썬 소스 디렉터리가 주어졌을 때, 자동으로 import 섹션으로부터 requirements.txt을 생성하는 것이 가능할까요?


25 개의 답변 중 2 개의 답변

개발 흐름을 개선하려면 Pipenv 또는 기타 도구를 사용하는 것이 좋습니다.

pip3 freeze > requirements.txt  # Python3
pip freeze > requirements.txt  # Python2

가상환경을 사용하지 않는다면 pigar가 좋은 선택이 될 수 있습니다.


자동으로 requirements.txt 생성하기 위해 다음 코드를 사용할 수 있습니다.

pipreqs에 대한 더 관련된 정보는 여기서 찾을 수 있습니다.

가끔 pip freeze를 사용할 수 있지만 현재 프로젝트에서 사용하지 않는 패키지를 포함하여 환경의 모든 패키지가 저장됩니다.

반응형
반응형

출처 : https://stackoverflow.com/questions/32234156/how-to-unimport-a-python-module-which-is-already-imported

이미 import된 python 모듈을 unimport 하는 방법?

저는 NumPy/SciPy에 매우 신입입니다. 요즘 Matlab을 사용하는 대신에 숫자 계산을 위해 매우 활발하게 그것을 사용하기 시작하였습니다.

간단한 계산을 위해 스크립트를 작성하는 것보다 interactive 모드에서 이를 실행합니다. 이러한 경우 이미 import한 모듈을 unimport하는 방법이 있을까요? unimport는 제가 파이썬 프로그램을 작성할 때는 필요 없겠지만, interactive 모듈에서는 필요합니다.

4개의 답변 중 1개의 답변

당신이 import한 것을 unload 하는 방법은 없습니다. 파이썬은 cache에 모듈의 복사본을 유지하기 때문에 다음에 reload와 다시 초기화하지 않고 그것을 (그대로) import합니다.

만약 당신이 필요한 게 그것으로 접근하지 않도록 하려면 del을 사용할 수 있습니다.

import package
del package

그런 다음 패키지를 다시 import하면 모듈의 캐시된 복사본이 사용됩니다.

다시 가져올 때 코드를 다시 실행할 수 있도록 모듈의 캐시된 복사본을 무효화하려면 @DeepSOIC의 답변에 따라 대신 sys.modules.pop을 사용할 수 있습니다.

당신이 패키지를 변경했고 갱신된 내용을 보고 싶다면, 당신은 그것을 reload 할 수 있습니다. 이는 몇가지 경우 작동하지 않을 수 있는데 import된 패키지가 그것에 의존적인 패키지를 reload할 필요가 있을 때입니다. 이것에 의존적인 것 이전에 관련된 문서를 읽어봐야 합니다.

Python 버전 2.7까지는 build-in 함수인 reload 를 사용합니다.

reload(package)

Python 3.0부터 3.3까지는 당신은 imp.reload 를 사용할 수 있습니다.

import imp
imp.reload(package)

Python 3.4 이상이라면 당신은 importlib.reload 를 사용할 수 있습니다.

import importlib
importlib.reload(package)
반응형
반응형


출처

https://stackoverflow.com/questions/44450889/why-does-spark-shell-fail-to-load-a-file-with-class-with-rdd-imported/44451056


왜 spark-shell은 RDD를 import한 class를 가진 파일을 불러오기를 실패할까요?

저는 Scala 2.11.8로 Spark 2.1.1을 사용합니다.

spark-shell에서 저는 RDD를 메소드로 가지는 클래스를 불러오기 위해 :load명령을 사용합니다.

그 클래스를 불러올 때 컴파일 오류가 나옵니다.

error: not found: type RDD

왜일까요? import 구문이 있습니다.

image

다음은 제가 작업한 코드입니다.

image1


답변

spark-shell에서 :load의 특징인듯 합니다. 해결책은 당신의 클래스 정의하는 부분으로 import org.apache.spark.rdd.RDD(.이나 _ 없이)를 이동하는 것입니다.

이는 RDD클래스에만 국한 된 것이 아니고 모든 클래스에 해당합니다. import문이 클래스 자체 내에 정의되어 있지 않으면 작동하지 않습니다.

말했듯이, 다음은 클래스 밖에 import하고 있기 때문에 작동하지 않을 것입니다.

import org.apache.spark.rdd.RDD
class Hello {
  def get(rdd: RDD[String]): RDD[String] = rdd
}

scala> :load hello.scala
Loading hello.scala...
import org.apache.spark.rdd.RDD
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                                    ^
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd

:load의 -v플래그를 사용하여 무슨 일이 발생하는 지 볼 수 있습니다.

scala> :load -v hello.scala
Loading hello.scala...

scala>

scala> import org.apache.spark.rdd.RDD
import org.apache.spark.rdd.RDD

scala> class Hello {
     |   def get(rdd: RDD[String]): RDD[String] = rdd
     | }
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                                    ^
<console>:12: error: not found: type RDD
         def get(rdd: RDD[String]): RDD[String] = rdd
                      ^

이는 클래스 정의 안에서 import를 하는 것이 도움이 될 것이라고 생각하게 되었습니다. 그리고 (저는 크게 놀라며) 실제로 그랬습니다!

class Hello {
  import org.apache.spark.rdd.RDD
  def get(rdd: RDD[String]): RDD[String] = rdd
}

scala> :load -v hello.scala
Loading hello.scala...

scala> class Hello {
     |   import org.apache.spark.rdd.RDD
     |   def get(rdd: RDD[String]): RDD[String] = rdd
     | }
defined class Hello

또한 :paste명령을 사용하여 클래스를 spark-shell에 붙여 넣을 수 있습니다. 고유한 패키지에 클래스를 정의할 수 있는 raw 모드가 있습니다.

package mypackage

class Hello {
  import org.apache.spark.rdd.RDD
  def get(rdd: RDD[String]): RDD[String] = rdd
}

scala> :load -v hello.scala
Loading hello.scala...

scala> package mypackage
<console>:1: error: illegal start of definition
package mypackage
^

scala>

scala> class Hello {
     |   import org.apache.spark.rdd.RDD
     |   def get(rdd: RDD[String]): RDD[String] = rdd
     | }
defined class Hello

scala> :paste -raw
// Entering paste mode (ctrl-D to finish)

package mypackage

class Hello {
  import org.apache.spark.rdd.RDD
  def get(rdd: RDD[String]): RDD[String] = rdd
}

// Exiting paste mode, now interpreting.
// 붙여넣기 모드를 종료하고 인터프리터 모드입니다.


반응형

+ Recent posts